证书

OCSP 与 CRL:证书吊销检查原理与 2026 年现状

作者: · 最后核实

证书吊销用来告诉客户端:这张证书还没过期,但已经不能再信任。CA 有两种发布方式:CRL 是一份签名的吊销序列号清单,OCSP 是按单张证书实时查询的状态服务。截至 2026 年 11 月,公网 PKI 已经全面转向 CRL:OCSP 对 CA 变成可选,Let's Encrypt 在 2025 年 8 月关掉了响应器,浏览器改用本地缓存的数据判断吊销。

为什么需要吊销

证书可能在到期前很久就变得不可信,这就是吊销存在的原因。常见情况有:私钥泄露、域名换了主人、证书签发有误、CA 发现自己的验证流程有漏洞。按照 Baseline Requirements,最严重的情形(例如确认私钥泄露)CA 要在 24 小时内吊销,其余大多数情形是 5 天。

真正的难点在于“让客户端知道”。浏览器要在几十亿张证书里,及时而且不泄露隐私地得知某一张已经作废。CRL 和 OCSP 是两种答案,各有代价。

CRL 的工作方式

CRL(证书吊销列表)是 CA 签名的一个文件,里面列出被吊销证书的序列号。格式定义在 RFC 5280 第 5 节,证书通过 CRL Distribution Points(CRL 分发点)扩展告诉客户端去哪里下载。

字段 含义
Issuer 签发这份清单的 CA
This Update / Next Update 本次生成时间、下一次最晚更新时间
Revoked Certificates 序列号、吊销时间、可选的吊销原因
CRL Number 单调递增的序号
Issuing Distribution Point 标记分片 CRL 及其覆盖范围
签名 CA 对以上内容的签名

大 CA 早就不发布一个巨大的 CRL 了,而是把吊销记录拆成许多分片 CRL(partitioned / sharded CRL)。2026 年 11 月签发的一张 Let's Encrypt 证书指向其中一个分片:

X509v3 CRL Distribution Points:
    Full Name:
      URI:http://ye2.c.lencr.org/51.crl

用 OpenSSL 解开这个分片,能看到它的结构(有删节):

Certificate Revocation List (CRL):
    Version 2 (0x1)
    Signature Algorithm: ecdsa-with-SHA384
    Issuer: C=US, O=Let's Encrypt, CN=YE2
    Last Update: Nov  9 17:52:09 2026 GMT
    Next Update: Nov 18 17:52:08 2026 GMT
    CRL extensions:
        X509v3 CRL Number:
            1794246729324766624
        X509v3 Issuing Distribution Point: critical
            Full Name:
              URI:http://ye2.c.lencr.org/51.crl
            Only User Certificates
Revoked Certificates:
    Serial Number: 05E7C117F64B64BC83F3691B78C8F454F1B2
        Revocation Date: Sep 24 17:49:02 2026 GMT

这个分片约 100 KB,有几千条记录。CRL 自带签名、可以缓存、能放在任何 CDN 上,但想完整覆盖就得下载很多份,所以浏览器不会在访问网站时临时去拉 CRL。

OCSP 的工作方式

OCSP(RFC 6960)把“下载清单”换成了“一问一答”。客户端向 CA 的响应器发一个请求,用签发者名称和公钥的哈希加上序列号来标识一张证书,响应器返回签名过的状态。

浏览器                              OCSP 响应器(CA)
   |  与 example.com 握手               |
   |  证书 AIA 里有 OCSP 地址           |
   |---- OCSP 请求(序列号 0x05E7…)---->|
   |<--- 签名响应:good / revoked / unknown,
   |     thisUpdate、nextUpdate --------|
   |  根据结果继续或中断连接            |
状态 含义
good 响应器认识这张证书,且未吊销
revoked 已吊销,附吊销时间和可选原因
unknown 响应器不认识这张证书

响应由 CA 本身或带 OCSP Signing EKU 的委托响应器证书签名。公网 CA 通常预先生成响应、通过明文 HTTP 由 CDN 分发,所以 RFC 里可选的 nonce 很少被使用。

OCSP 为什么被放弃

OCSP 在隐私、可靠性和性能上都有结构性问题,业界最终认定修不好。

  • 隐私:每次查询都等于告诉 CA“这个 IP 正要访问哪个网站”,而且请求走明文 HTTP,链路上的任何人都看得到。Let's Encrypt 把这一点列为停用 OCSP 的首要原因。
  • 软失败:响应器连不上时,浏览器一向选择放行,否则 CA 的每次故障都会变成网站故障。能劫持流量的攻击者通常也能顺手拦掉 OCSP 请求,所以软失败的检查恰恰在最需要时失效。
  • 延迟:Mozilla 统计,OCSP 请求让 TLS 握手的中位数多阻塞约 100 毫秒。在国内访问境外 CA 的 OCSP 响应器,延迟和超时往往更明显,这也是过去国内运维普遍开启 Stapling 的原因。
  • 成本:Let's Encrypt 高峰期每月要应答约 3400 亿次 OCSP 请求。

OCSP Stapling 与 Must-Staple

OCSP Stapling 把查询从浏览器挪到了服务器。客户端在握手中带上 RFC 6066 第 8 节定义的 status_request 扩展,服务器把自己事先取回的 OCSP 响应“钉”在握手里一起发出。TLS 1.2 里它是单独的 CertificateStatus 消息;TLS 1.3 里它放在 Certificate 消息中叶子证书条目的扩展里。

Stapling 解决了隐私和延迟,却解决不了软失败:服务器完全可以不钉。Must-Staple(RFC 7633 的 TLS Feature 扩展,OID 1.3.6.1.5.5.7.1.24)本想补上这个缺口,要求客户端在收不到钉附响应时拒绝证书。但实际情况是 Firefox 执行、Chrome 不执行,服务器在响应器故障时处理得很糟,带这个扩展的证书极少。Let's Encrypt 在 2025 年已不再接受 Must-Staple 申请。

# 只有证书里仍有 OCSP 地址时才有意义
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/chain.pem;
resolver 223.5.5.5 119.29.29.29 valid=300s;

SC-063:CRL 必须有,OCSP 可选

CA/Browser Forum 在 2023 年通过的 SC-063 投票,把两种机制的地位颠倒了过来:签发公开信任 TLS 证书的 CA 必须发布 CRL,OCSP 则成为可选项。

投票同时规定了 CRL 的更新频率:吊销一张证书后 24 小时内必须发布新 CRL;平时,如果证书里带 OCSP 地址,至少每 7 天更新一次,否则至少每 4 天一次。分片 CRL 明确允许,只要合起来能覆盖全部吊销证书。

SC-063 还定义了短期证书:有效期不超过 10 天的证书(2026 年 3 月 15 日起签发的收紧到 7 天)可以不带 CRL 或 OCSP 地址,也不要求吊销,靠到期自然失效。Let's Encrypt 的 shortlived 配置签发 160 小时的证书,正好落在这个范围内。

Let's Encrypt 在 2025 年停掉 OCSP

全球签发量最大的 Let's Encrypt 在 2025 年 8 月完成了向“只用 CRL”的切换。它 2022 年起就支持 CRL,2024 年 12 月 5 日公布了时间表:

日期 变化
2025-01-30 新的 Must-Staple 申请失败(以前用过 Must-Staple 的账户除外)
2025-05-07 证书已带 CRL 地址;去掉 OCSP 地址;所有 Must-Staple 申请失败
2025-08-06 关闭 OCSP 响应器

到关停那天,所有带 OCSP 地址的证书都已过期,因此没有在用证书受影响。Let's Encrypt 特别提醒:浏览器和网站不受影响,但一些非浏览器软件,比如配置成必须查 OCSP 的 VPN 客户端或企业中间件,可能需要调整。国内不少政企内网设备、老版本 Java 应用开启了严格吊销检查,换成 Let's Encrypt 证书前值得先测一遍。

更多相关变化见 Let's Encrypt 时间线。

浏览器现在怎么查吊销

现代浏览器提前把吊销数据推送到本地,而不是在握手时去问 CA。两种主流方案的覆盖范围差别很大:

客户端 机制 覆盖范围
Chrome / Edge CRLSets:从 CA 的 CRL 中挑选,经组件更新下发 紧急和重点吊销;按 Mozilla 的对比约占全部吊销的 1%
Firefox 桌面版 CRLite:把 CT 日志中所有被吊销证书压缩编码,每 12 小时更新 CT 日志中证书的全部吊销
Firefox 对 DV 证书 自 Firefox 142 起停用 OCSP 由 CRLite 覆盖

Chromium 官方文档写明 Chrome 一般不做在线 OCSP/CRL 检查,企业策略可以重新打开在线 OCSP。Mozilla 从 Firefox 137 起为所有桌面用户启用 CRLite,平均每天下载约 300 KB 吊销数据。CRLite 依赖 证书透明度:只有能在 CT 日志里找到的证书才会被收录。

浏览器之外的 TLS 实现各有各的规则。Windows CryptoAPI、Java 以及大量嵌入式客户端都有自己的吊销设置,有些企业产品可以配置成硬失败。如果你在维护这类软件,请用一张不带 OCSP 地址的证书测试一下。

运维需要做什么

大多数网站什么都不用改,但有几处配置值得检查。先确认证书里到底有哪些吊销指针:

openssl x509 -in cert.pem -noout -ocsp_uri
openssl x509 -in cert.pem -noout -ext crlDistributionPoints,authorityInfoAccess
  • Let's Encrypt 证书的 Stapling:-ocsp_uri 没有输出,就说明 ssl_stapling 无事可做。宝塔等面板的默认模板常常打开它,留着无害,去掉可以少一条日志警告。
  • Must-Staple:从 ACME 客户端配置里删掉 --must-staple 之类的选项,否则 Let's Encrypt 会拒绝订单。
  • 内部客户端:对 OCSP 有硬性要求的应用(开启 OCSP 的 Java、严格检查吊销的 VPN 网关)要能接受只有 CRL 的证书。
  • 私有 PKI:自建 CA 仍然可以运行 OCSP,但无论如何都应发布 CRL,参见 私有 CA 命令手册。
  • 私钥泄露:先通过 CA 或 ACME 客户端吊销,再立即换证。不要只依赖吊销,部分客户端可能要好几天才会察觉。

检查线上服务器可以用 openssl s_client -status,看输出里有没有 OCSP response。浏览器里的吊销报错见 NET::ERR_CERT_REVOKED。

吊销的未来

吊销问题的长期答案是缩短证书寿命。根据 SC-081v3 投票,公开信任 TLS 证书的最长有效期从 2026 年 3 月 15 日起是 200 天,2029 年 3 月 15 日起降到 47 天,详见 47 天证书。47 天证书的私钥一旦泄露,攻击者能利用的时间是几周而不是一年;6 天证书则根本不需要吊销。

CRL 仍是权威来源,浏览器把它们压缩成 CRLSets 和 CRLite,OCSP 主要留在私有 PKI 和选择继续提供它的 CA 那里。想亲手查看这些数据,可以照着 OCSP 与 CRL 命令手册 一步步来。

常见问题

nginx / 宝塔里的 ssl_stapling 还要不要开?

只有证书里还带 OCSP 地址时才有用,先用 openssl x509 -in cert.pem -noout -ocsp_uri 查看。2025 年 5 月 7 日之后签发的 Let's Encrypt 证书没有 OCSP 地址,开了 stapling 也取不到响应,只会在日志里多一条警告;如果证书仍带 OCSP 地址,开着没有坏处。

OCSP 退场以后,吊销还有用吗?

有用。CA 必须发布 CRL,Chrome 把其中一部分做成 CRLSets,Firefox 把 CT 日志里所有吊销做成 CRLite;同时证书有效期越来越短,被吊销证书能被滥用的时间窗口也在缩小。7 天以内的短期证书甚至不需要吊销信息。

怎么自己查一张证书有没有被吊销?

从证书的 CRL Distribution Points 扩展拿到 CRL 地址,下载后查找证书序列号,或者直接用 openssl verify -crl_check;证书若还有 OCSP 地址,也可以用 openssl ocsp 查询。完整命令见 OCSP 与 CRL 命令手册。

国内的 360、QQ 浏览器会检查吊销吗?

这些浏览器大多基于 Chromium 内核,通常沿用 Chromium 的做法:不在握手时在线查 OCSP/CRL,而是依赖内置或下发的吊销数据。具体策略各厂商不同,也可能随版本变化,重要场景不要假设客户端一定会发现吊销。

资料来源

  1. RFC 5280:X.509 证书与 CRL 规范
  2. RFC 6960:在线证书状态协议 OCSP
  3. RFC 6066:TLS 扩展(第 8 节 status_request)
  4. CA/Browser Forum Ballot SC063v4
  5. Let's Encrypt:Ending OCSP Support in 2025
  6. Let's Encrypt:OCSP Service Has Reached End of Life
  7. Chromium:CRLSets
  8. Mozilla Hacks:Firefox 中的 CRLite