Skip to content

链验证

证书不是孤立可信的,它必须挂在一条能追到信任根的链上。这一组能力验证链的完整性与可信度。

两条命令

命令作用
verify-chain <domain>对照系统信任库验证证书链
check-bundle <domain>检查证书包完整性,缺失中间证书时走 AIA 补全

信任链验证

bash
cert-skills verify-chain example.com

把服务器出示的叶子 + 中间证书一路追到根,逐级检查:

每一级都校验:签名有效、未过期、KeyUsage 合规(CA 须含 keyCertSign)、pathLenConstraint 不越界。

信任链的本质

链验证 = 逐级"签名追签"直到追到系统信任库里预置的根。每一级不光验签名,还验"这张 CA 有没有资格签这一级"——靠 KeyUsage(含 keyCertSign 才是 CA)和 pathLenConstraint(限制还能往下嵌套几层)约束。

Bundle 完整性

部署时最常见的错误:服务器只发叶子证书,忘了发中间证书,导致客户端找不到链路。

bash
cert-skills check-bundle example.com

check-bundle 的关键能力:当发现中间证书缺失时,从叶子证书的 AIA(Authority Information Access) 扩展里读 caIssuers URL,主动去拉取中间证书再补验。这让诊断"为什么有的客户端报错有的不报错"变得可解释——不同客户端的信任库缓存不同,AIA 补全行为也不同。

AIA 补全不是万能的

AIA 拉取依赖叶子证书里写了 caIssuers URL,且该 URL 可达。有些证书没写 AIA 扩展,或 URL 已失效——这时 check-bundle 也补不了,必须手动补中间证书。生产部署的正确做法是服务器直接发完整链,不要依赖客户端 AIA 补全。

链拓扑

在测绘场景下,map-scan 会用链数据构建信任拓扑图:以每张证书为节点,issuer→subject 为边,自签自环,找出 Roots(无入边)和 Leaves(无出边)。详见 批量扫描与拓扑

常见链问题速查

现象可能原因用哪个工具
浏览器报"证书不受信任"链不可信/根不在库verify-chain
部分客户端 OK,部分报错中间证书缺失check-bundle
链可建但 pathLen 越界中间 CA 的 pathLen 设错verify-chain + 多层 PKI
链含被吊销 CA用了 DigiNotar 等check-distrusted-ca
链问题速查决策图

按现象快速选工具:

  • 浏览器报"不受信任"verify-chain(链不可信或根不在库)
  • 部分客户端 OK 部分报错check-bundle(中间证书缺失)
  • 报"pathLen constraint violated"verify-chain + 查中间 CA 的 pathLen
  • 怀疑用了被除名的 CAcheck-distrusted-ca(DigiNotar/WoSign/Symantec legacy...)

下一步