所有 SSL 文章 SSL 与证书

证书吊销:OCSP、CRL 以及证书被泄露后的处理方式

证书吊销是指在 SSL 证书到期之前使其失效的过程——通常是因为私钥泄露、证书被错误签发,或域名所有权发生变更。

理论上,吊销是 CA 体系应对紧急情况的方式。但实际上,它是 PKI 基础设施中最薄弱的环节。以下是原因,以及正在替代它的方案。

何时需要吊销证书

  • 私钥泄露 —— 密钥被泄露、窃取或暴露(例如提交到公开的 Git 仓库)
  • 证书错误签发 —— CA 为你不控制的域名签发了证书
  • 域名转让 —— 你不再拥有证书所覆盖的域名
  • 密钥轮换 —— 你正在轮换密钥并希望废弃旧证书
  • 服务器退役 —— 证书不应再有效

吊销的工作原理

CRL(证书吊销列表)

这是最早的吊销机制。CA 发布所有已吊销证书序列号的列表,浏览器下载该列表并进行比对。

问题:

  • CRL 会随时间增长变得非常大(数百万条记录)
  • 浏览器必须在验证证书之前下载整个列表
  • 速度慢且消耗带宽——大多数浏览器多年前就已停止检查 CRL

OCSP(在线证书状态协议)

实时查询机制。浏览器不再下载列表,而是向 CA 的 OCSP 服务器询问:“这个证书是否被吊销了?”

工作流程:

Browser → OCSP Responder: "Is cert serial #12345 still valid?"
OCSP Responder → Browser: "Good" / "Revoked" / "Unknown"

问题:

  • 隐私 —— CA 能知道你正在访问哪些网站(它们能看到每个 OCSP 请求)
  • 延迟 —— 每个新的 HTTPS 连接都增加一次网络往返
  • 可用性 —— 如果 OCSP 响应器宕机,浏览器通常会软失败(仍然接受证书),导致吊销机制形同虚设

OCSP Stapling(改进方案)

服务器定期获取 OCSP 响应并将其”装订”到 TLS 握手中。浏览器无需联系 CA 即可获得吊销状态。

优势:

  • 无隐私泄露(浏览器不会联系 CA)
  • 无额外延迟(响应与握手捆绑发送)
  • 即使 CA 的 OCSP 服务器缓慢或宕机也能正常工作

配置方法:

Nginx:

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Apache:

SSLUseStapling on
SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(128000)"

CRLite(未来方案)

Mozilla 的 CRLite 将所有已知的吊销信息压缩为紧凑的过滤器(约 1.5 MB),随 Firefox 更新一起分发。浏览器可以在本地检查吊销状态——无需网络请求、无隐私泄露、无延迟。截至 2026 年,CRLite 已在 Firefox 中启用,未来可能被其他浏览器采用。

吊销机制的残酷现实

吊销在实际中基本是失效的:

  • Chrome 默认不检查 OCSP 或 CRL(依赖其自有的 CRLSets——一个精选子集)
  • Safari 检查 OCSP 但软失败(OCSP 服务器不可达时仍接受证书)
  • Firefox 使用 CRLite(最佳方案,但仅限 Firefox)
  • OCSP 软失败意味着攻击者可以阻断 OCSP 检查,浏览器仍会接受已吊销的证书

这就是为什么行业正转向短期证书作为主要防御手段:

方案防护方式
吊销(OCSP/CRL)使泄露的证书失效——但检查机制不可靠
短期有效期(90 天 → 47 天泄露的证书很快过期——无需检查

如果证书有效期仅为 47 天,被窃取的密钥最多只能使用 47 天。即使吊销机制不起作用,也能限制损害。

如何吊销 Let’s Encrypt 证书

如果你的私钥泄露了:

# With Certbot
sudo certbot revoke --cert-path /etc/letsencrypt/live/yourdomain.com/cert.pem --reason keycompromise

# With acme.sh
acme.sh --revoke -d yourdomain.com

吊销后,立即获取新证书——吊销不会修复问题,它只是使旧证书失效。使用 GetHTTPS 用新密钥对签发一份新证书。

常见问题

我应该启用 OCSP Stapling 吗?

应该。它不能保证吊销检查有效(浏览器可能忽略它),但整体上是有益的:更快的 TLS 握手(无需客户端查询 OCSP)、更好的隐私(浏览器不联系 CA),且部分浏览器确实会遵循装订的 OCSP 响应。启用它没有成本——NginxApache 只需 2-3 行配置即可支持。

吊销多快生效?

CRL 定期发布(数小时到数天)。OCSP 响应有缓存(通常 1-4 小时)。实际上,已吊销的证书可能对某些浏览器来说在长达 24 小时内仍然”有效”。这是短期证书正在取代吊销成为主要防御手段的又一原因。

续签时需要吊销旧证书吗?

不需要。获取新证书不需要吊销旧证书。旧证书只会自然过期。只有在私钥泄露时才需要吊销——常规续签不需要。

如何检查证书是否已被吊销?

# Check OCSP status
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -status 2>/dev/null | grep "OCSP Response Status"
# "successful" = OCSP stapling is working
# If empty, stapling is not enabled

或者查看 crt.sh——已吊销的证书会在界面中标注。

相关文章

SSL 与证书 2026-05-07
证书信任链详解
浏览器如何通过从根 CA 到中间 CA 再到你的证书的链条来验证 SSL 证书。了解为什么链顺序很重要,以及如何修复'证书不受信任'错误。
SSL 与证书 2026-05-07
SSL 证书有效期:47 天变更详解
CA/Browser Forum 投票决定到 2029 年将 SSL 证书有效期缩短至 47 天。了解时间线、对你网站的影响,以及如何准备。
SSL 与证书 2026-05-07
什么是证书颁发机构(CA)?
证书颁发机构签发 SSL 证书以证明网站身份。了解 CA 的工作原理、信任模型、主要 CA,以及 Let's Encrypt 如何改变了行业。
部署 2026-05-08
如何在 Nginx 上安装 SSL 证书
在 Nginx 上安装 SSL 证书的分步指南。涵盖文件上传、完整 server 块配置、TLS 最佳实践、HTTP/2、HSTS、重定向设置、测试以及 6 个常见错误的排查方法。
在浏览器中获取免费 SSL 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书