You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Linux命令行检查证书链并排查缺失的信任证书

证书信任判断与Let's Encrypt证书链排查指南

一、从openssl x509 -in certificate.pem -text输出判断证书是否受信任

仅靠这个命令的输出无法100%确定证书是否被本地系统信任,但可以通过以下关键点验证证书本身的合法性和链逻辑:

  • 追溯签发链:查看Issuer(签发CA)和Subject(证书持有者)字段。如果两者一致,这是根CA证书,需要确认本地信任存储中是否包含它;如果不一致,说明是中间CA或服务器证书,必须能往上追溯到已被信任的根CA才算有效。
  • 检查签名算法:看Signature Algorithm字段,避免使用SHA1等已被弃用的算法,这类算法的证书会被现代系统拒绝信任。
  • 确认有效期:在Validity段中,确保当前时间处于Not Before和Not After之间,过期或未生效的证书直接不被信任。
  • 验证扩展字段:
    • X509v3 Basic Constraints:CA证书会显示CA:TRUE,服务器证书则为CA:FALSE;中间CA还会标注Path Length Constraint,限制其签发下级证书的层级。
    • X509v3 Subject Alternative Name:确保你要访问的域名在这个字段的列表内,否则会触发域名不匹配的信任错误。
    • X509v3 Authority Key Identifier与X509v3 Subject Key Identifier:上级CA的Subject Key Identifier必须和当前证书的Authority Key Identifier一致,以此验证证书链的连贯性。

注意:最终的信任判定还是要看本地系统的信任存储是否包含链顶端的根CA,这个命令只能帮你排查证书本身的属性问题。

二、Let's Encrypt证书链缺失的本地排查方法

针对tls: failed to verify certificate: x509: certificate signed by unknown authority这类错误,可通过以下步骤高效排查:

  • 直接验证服务器返回的证书链:执行命令openssl s_client -connect 目标域名:443 -servername 目标域名,输出中会列出服务器返回的完整证书链。如果链中缺少中间CA,会看到Verify return code: 21 (unable to verify the first certificate)的提示。
  • 对比标准Let's Encrypt证书链:Let's Encrypt的服务器证书必须搭配对应中间CA(如R3、E1)才能被信任。将本地持有的证书与服务器返回的链对比,确认是否遗漏了中间CA文件。
  • 检查本地信任存储:
    • Linux:查看/etc/ssl/certs/或/usr/local/share/ca-certificates/目录,确认ISRG Root X1(Let's Encrypt的根CA)存在且未过期;旧系统可能仍使用已过期的DST Root CA X3,需要更新。
    • Windows:通过certmgr.msc打开证书管理器,检查“受信任的根证书颁发机构”中是否有ISRG Root X1。
    • macOS:打开“钥匙串访问”,搜索ISRG Root X1,确认它在“系统根证书”列表中且状态为信任。
  • 验证本地证书链完整性:将服务器证书与中间CA证书合并为一个PEM文件,执行openssl verify -CAfile 本地信任根CA.pem 合并后的证书链.pem。如果验证通过,说明链完整;失败则会提示具体的缺失环节。
  • 排查客户端证书加载逻辑:比如Go语言客户端,要确认代码是否正确加载了系统根证书池,或是否手动指定了包含完整链的CA文件。如果是自定义CA池,需确保根CA或中间CA已被正确添加。

内容的提问来源于stack exchange,提问作者xrfang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:03:43