证书信任链检查失败,如何排查其失败原因?
证书信任链检查失败的原因分析与排查步骤
核心错误定位
你执行的openssl verify -CAfile DEVICE_ROOT.pem device.crt输出中,最关键的失败原因是第一块错误:
C = EST, ST = Tallin, L = Tallin, O = COMPANY NAME, CN = 0000000330 DEVICE CERT error 20 at 0 depth lookup: unable to get local issuer certificate device.crt: verification failed
这条错误明确说明:device.crt的直接签发者证书,不在你指定的DEVICE_ROOT.pem文件中,或者两者的身份信息不匹配。
后面的STORE routines错误属于OpenSSL环境的附加问题,会干扰输出但不是导致证书链验证失败的核心原因,可后续处理。
分步排查步骤
1. 验证证书身份匹配性
分别提取设备证书的签发者信息,以及根证书的主体信息,对比是否完全一致:
- 查看
device.crt的签发者(Issuer):openssl x509 -in device.crt -noout -issuer - 查看
DEVICE_ROOT.pem的主体(Subject):openssl x509 -in DEVICE_ROOT.pem -noout -subject
如果两者输出的内容不完全相同,说明你使用的DEVICE_ROOT.pem不是device.crt的直接签发证书,需要找到正确的中间证书或根证书。
2. 检查证书文件完整性与格式
- 验证
DEVICE_ROOT.pem是否为有效PEM格式证书:openssl x509 -in DEVICE_ROOT.pem -noout -text
如果命令报错,说明证书文件损坏、格式错误(比如不是PEM格式,而是DER格式),需要重新获取正确的证书文件。
- 如果
device.crt是包含中间证书的链式文件,尝试单独提取设备证书后再验证:# 提取设备证书(链式文件中第一个证书通常是终端证书) openssl x509 -in device.crt -out device_only.crt -noout # 用根证书验证单独的设备证书 openssl verify -CAfile DEVICE_ROOT.pem device_only.crt
3. 处理OpenSSL环境附加错误
后面的STORE错误是因为OpenSSL尝试查找系统默认证书目录失败,且未加载默认provider,可通过以下方式消除:
- 验证时添加
-no-CApath参数,强制只使用你指定的-CAfile文件,跳过系统证书目录查找:openssl verify -no-CApath -CAfile DEVICE_ROOT.pem device.crt - 检查OpenSSL provider配置:执行
openssl version -a查看输出中的OPENSSLDIR和Providers信息,确保默认provider(default、base)已启用,若未启用,可通过设置环境变量OPENSSL_CONF指定正确的配置文件。
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

