路径校验
"这张证书能不能被信任?"——这是 PKI 的终极问题。crt.sh 的 ?pv= 端点用主流信任库模拟校验流程,给出权威答案。
什么是路径校验
浏览器/操作系统信任一张 TLS 证书,要满足:从叶子证书出发,沿签发链逐级向上,最终落到一个预装在信任库里的根 CA,且链上每一环都满足有效期、用途、策略、吊销等约束。
flowchart TB LEAF["叶子证书
example.com"] -->|签发| MID["中间 CA"] MID -->|签发| ROOT["根 CA"] ROOT -.->|在信任库里?| CHECK{是} CHECK -->|是| OK["校验通过
crt.sh ?pv= 显示 green"] CHECK -->|否| FAIL["校验失败
显示 broken chain"] LEAF -.->|有效期/用途/吊销| C2["每环都校验"]
example.com"] -->|签发| MID["中间 CA"] MID -->|签发| ROOT["根 CA"] ROOT -.->|在信任库里?| CHECK{是} CHECK -->|是| OK["校验通过
crt.sh ?pv= 显示 green"] CHECK -->|否| FAIL["校验失败
显示 broken chain"] LEAF -.->|有效期/用途/吊销| C2["每环都校验"]
FetchPathValidationView
go
html, _ := client.FetchPathValidationView(ctx, 12345)
// html = crt.sh ?pv=12345 页面,含校验结果树端点 ?pv=id。页面会展示:
- 01构造签发链叶子 → … → 根
- 02逐环校验每一环的校验状态(有效/无效及原因)
- 03最终结论能否在主流信任库里建出可信链
与合规检查的关系
单张 vs 整条链
路径校验是合规的"最后一公里"。证书合规与 Lint 关注单张证书本身是否合规(lint 规则),路径校验关注整条链在真实世界里能否被信任。两者结合才是完整的"可信"判断:
flowchart LR L["Lint 全过
(单张合规)"] --> AND{且} P["路径校验通过
(整条链可信)"] --> AND AND --> OK["✓ 完全可信"]
(单张合规)"] --> AND{且} P["路径校验通过
(整条链可信)"] --> AND AND --> OK["✓ 完全可信"]
两个不等式
- 单张证书 lint 全过 ≠ 链能被信任(可能中间证书不在信任库)
- 链能校验通过 ≠ 单张证书无 lint 问题(可能有技术上合规但不推荐的用法)
典型场景
🐛排查客户端报错
用 ?pv= 看链在哪一环断了
🏛️CA 调查
看某 CA 签的证书在主流信任库里是否普遍可校验
🕵️取证
还原某历史证书当时的可信任状态
下一篇