Skip to content

路径校验

"这张证书能不能被信任?"——这是 PKI 的终极问题。crt.sh 的 ?pv= 端点用主流信任库模拟校验流程,给出权威答案。

FetchPathValidationView?pv= 端点PKI 终极问题

什么是路径校验

浏览器/操作系统信任一张 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["每环都校验"]

FetchPathValidationView

go
html, _ := client.FetchPathValidationView(ctx, 12345)
// html = crt.sh ?pv=12345 页面,含校验结果树

端点 ?pv=id。页面会展示:

  1. 01
    构造签发链
    叶子 → … → 根
  2. 02
    逐环校验
    每一环的校验状态(有效/无效及原因)
  3. 03
    最终结论
    能否在主流信任库里建出可信链

与合规检查的关系

单张 vs 整条链

路径校验是合规的"最后一公里"。证书合规与 Lint 关注单张证书本身是否合规(lint 规则),路径校验关注整条链在真实世界里能否被信任。两者结合才是完整的"可信"判断:

flowchart LR L["Lint 全过
(单张合规)"] --> AND{且} P["路径校验通过
(整条链可信)"] --> AND AND --> OK["✓ 完全可信"]

两个不等式

  • 单张证书 lint 全过 链能被信任(可能中间证书不在信任库)
  • 链能校验通过 单张证书无 lint 问题(可能有技术上合规但不推荐的用法)

典型场景

🐛排查客户端报错
用 ?pv= 看链在哪一环断了
🏛️CA 调查
看某 CA 签的证书在主流信任库里是否普遍可校验
🕵️取证
还原某历史证书当时的可信任状态

下一篇

CA 调查