CRL (证书吊销列表)
定义
CRL 是由 CA 签名并定期重新发布的证书吊销列表,列出它在证书到期前就已吊销的证书序列号。
CRL 是 RFC 5280 规定格式的签名数据结构,列出 CA 已吊销证书的序列号,每条记录带吊销时间,并可附带原因码,例如 keyCompromise(密钥泄露)、superseded(已被取代)。CRL 本身有 thisUpdate 和 nextUpdate 字段,证书通过“CRL 分发点”(CRL Distribution Points)扩展指向它。大型 CA 会把列表拆分成许多较小的分片 CRL。
为什么重要
CRL 如今是 Web PKI 吊销机制的主干。CA/B 论坛 SC-063 投票(2024-03-15 生效)规定公开信任的 TLS CA 必须提供 CRL,OCSP 则改为可选;Let's Encrypt 结束 OCSP 之后同样发布 CRL。浏览器很少在握手时下载 CRL,而是集中汇总:Chrome 生成 CRLSets,Mozilla 用 CA 向根证书计划披露的 CRL 生成 CRLite。同一投票还规定,有效期不超过 7 天的短期证书(2026-03-15 起签发)可以不带 CRL 或 OCSP 地址。
例子
# 这张证书的 CRL 在哪里?
openssl x509 -in cert.pem -noout -ext crlDistributionPoints
# 下载并查看(CRL 通常是 DER 编码)
curl -sO http://crl.example.com/1.crl
openssl crl -in 1.crl -inform DER -noout -text | head -20
输出里可以看到 Last Update、Next Update,以及一条条带 Serial Number 和 Revocation Date 的吊销记录。
常见误区
- CRL 已经过时,被 OCSP 取代了。 恰恰相反,现在 CRL 是强制的,OCSP 才是可选的。
- 吊销之后所有客户端立刻知道。 CRL 反映的是 thisUpdate 时刻的状态,新的吊销要等下一版 CRL 发布、再被浏览器汇总下发后才会生效。
- 客户端每次连接都会下载 CRL。 主流浏览器依赖汇总好的吊销数据,并不会逐次下载。