1. 证书基础回顾:X.509标准、证书链、公钥基础设施(PKI)核心概念
聊证书吊销之前,咱们得先把地基夯实。说实话,很多搞安全的同学对证书的理解停留在「装了就完事」,一旦遇到吊销场景就懵了。我个人习惯是,不管讲什么新方案,先把底层概念过一遍,这样后面讲 OCSP、CRL 的时候你才不会觉得飘。
好,咱们开始。
1.1 什么是 X.509?它到底规定了什么?
X.509 不是一种「证书」,它是一个标准。说白了,它定义了证书长什么样、里面该塞哪些字段、怎么签名、怎么验证。
我记得刚入行时,有同事问我:「X.509 和 SSL 证书有什么区别?」我当时愣了一下,后来才搞明白——SSL 证书只是 X.509 标准的一个具体应用。你平时在浏览器里看到的那一串「颁发给、颁发者、有效期」,全是 X.509 规定的。
一个标准的 X.509 v3 证书,核心字段如下:
| 字段 | 说明 | 我踩过的坑 |
|---|---|---|
| 版本号 | 目前主流是 v3(值为2) | v1/v2 不支持扩展,别用了 |
| 序列号 | CA 分配的唯一整数 | 吊销时就是靠它定位证书 |
| 签名算法 | 如 sha256WithRSAEncryption | 别用 SHA-1,已经被撞了 |
| 颁发者 | 签发该证书的 CA 名称 | 拼写错了会导致链构建失败 |
| 有效期 | notBefore / notAfter | 注意时区问题,我吃过亏 |
| 主体 | 证书持有者身份 | CN 和 SAN 要匹配域名 |
| 公钥 | 算法 + 公钥值 | RSA 2048 起步,别省 |
| 扩展 | v3 新增,如 密钥用法、CA 标志 | 吊销相关的 CRL/OCSP 地址就在这里 |
openssl x509 -text -in cert.pem 查看证书的完整结构。你试试看,所有字段一目了然。
1.2 证书链:为什么不是一张证书搞定?
你想想看,如果全世界只有一张根证书,那它一旦泄露,整个互联网就完了。所以 PKI 设计了一个层级结构——证书链。
典型的证书链长这样:
根 CA(自签名)
└── 中间 CA(由根 CA 签发)
└── 终端证书(由中间 CA 签发,用于网站/客户端)
为什么要有中间 CA?我在项目中遇到过一件事:某公司根证书私钥被运维误删了,幸好他们用了中间 CA 架构,根证书离线存储,中间 CA 重新签发就行,损失降到了最低。如果只有一层,那得重新部署所有终端证书,想想就头大。
验证证书链时,系统会从终端证书开始,逐级向上验证签名,直到信任的根证书。这个过程中,任何一级证书被吊销,整条链就废了。
1.3 PKI 核心概念:不只是证书
PKI(公钥基础设施)不是单指证书,它是一个完整的体系。我把它拆成四个核心组件:
- CA(证书颁发机构)——负责签发和吊销证书。它是 PKI 的「信任源头」。
- RA(注册机构)——负责验证申请者身份。CA 不直接面对用户,RA 干这活。
- 证书库——存储已签发证书和吊销信息的地方。LDAP 或 HTTP 服务器都行。
- 终端实体——使用证书的人或设备。比如你的浏览器、服务器。
这里面有个关键点:信任锚。你的操作系统或浏览器里预置了一批根证书,这些就是信任锚。只要证书链能追溯到这些根,系统就认为它是可信的。
但信任不是永久的。证书可能因为私钥泄露、域名变更、员工离职等原因被吊销。这就是咱们这门课的核心——如何及时发现并处理被吊销的证书。
1.4 一张图看懂 PKI 与证书链
下面这张 SVG 图是我自己画的,把 PKI 的核心流程串起来了。你仔细看,从根 CA 到终端证书,再到吊销检测,都在里面。
1.5 为什么这些基础对证书吊销至关重要?
好,现在你知道了 X.509 证书的结构、证书链的层级、PKI 的组件。那这些跟证书吊销有什么关系?
关系大了去了。
- 序列号——吊销列表(CRL)里就是靠序列号标记哪些证书被废了。
- 颁发者——CRL 和 OCSP 响应里必须指明是哪个 CA 签发的吊销信息。
- 扩展字段——CRL 分发点(CDP)和 OCSP 响应地址就藏在证书的扩展里。没有它们,客户端根本不知道去哪查吊销状态。
- 证书链——如果中间 CA 被吊销,它签发的所有终端证书都得跟着失效。这就是「级联吊销」效应。
我个人习惯是,每接触一套 PKI 系统,第一件事就是导出根证书和中间 CA 证书,用 openssl 看看它们的扩展字段里有没有 CDP 和 OCSP 地址。没有?那这套系统的吊销能力基本为零,得补上。