PKI(Public Key Infrastructure,公钥基础设施)是一套制度与角色安排,用于把“公钥”和“身份”绑在一起;X.509 规定证书长什么样、包含哪些字段;证书链(certificate chain)则是从服务器证书一路向上追到根证书的那条签名路径。
打个比方:护照和签发机关
你出国办签证,签证官并不了解你这个人,他信任的是护照——因为护照由出入境管理部门签发;而这个部门之所以可信,又因为它隶属于大家都承认的体系。证书也一样:服务器出示的终端证书由中间证书签发,中间证书由根证书签发,根证书则自己给自己盖章(自签名)。
关键在于最后一步:根证书不是被“验证”出来的,而是被预装在操作系统和浏览器的信任库(trust store)里的。它才是整条链的信任锚点(trust anchor)。所以浏览器真正做的事是在问“这张证书能不能连到我预装的那几百张根证书之一?”,并非判断“这张证书可不可信”。
链通常分三层:终端证书(leaf,绑定域名)→ 中间证书(intermediate CA)→ 根证书(root CA)。中间层的作用是隔离风险:日常签发用中间证书的私钥,根私钥可以锁进保险柜,多年不动。
校验到底在验什么
1. 能否拼出一条通往信任库里某张根证书的完整链;
2. 每一级的签名是否确实由上一级的私钥生成;
3. 有效期、域名(SAN,Subject Alternative Name)、用途扩展是否匹配;
4. 是否被吊销(CRL / OCSP)。
任何一步不通过就报警。链条断了同样报错——服务器忘记下发中间证书,是自建服务里最常见的故障之一。
几个容易混的词
| 概念 | 管什么 | 别误会成 |
|---|---|---|
| X.509 | 证书的格式与字段规范 | 一种通信协议 |
| PKI | 谁签发、谁吊销、谁信任的整套体系 | 一张证书 |
| TLS | 认证后协商会话密钥的协议 | 加密靠证书本身 |
| pinning | 客户端写死只认某张证书或公钥 | 配一次就一劳永逸 |
顺带一提:HTTPS 传输用的对称密钥是握手时临时协商出来的,证书只负责回答“你连的是谁”。
证书锁定(pinning)
证书锁定是在系统信任库之外再上一道锁:在 App 内预置服务器证书或公钥的指纹(更常见是锁公钥 SPKI,这样续期换证书不受影响),只认这一个。好处是能挡住企业代理证书、被攻陷的 CA 之类的中间人;代价是运维——证书或密钥一换就可能全线连不上,所以要留备份 pin 和过渡期。
对你的意义
普通人:有人让你“装个根证书才能上网”,等于把签发权交出去,先问清是谁的、能不能卸;看到证书警告别习惯性点“继续访问”。企业内网做 HTTPS 拦截,原理就是往你设备里塞一张自己的根证书。
从业者:SDK 报 SSL 错误,先查链是否完整(服务端应下发 leaf + intermediate);内网 mTLS、模型下载、私有镜像仓库都吃这一套。各平台信任库的具体策略以官方文档为准。
