OCSP Stapling 是什么?它为什么能优化 HTTPS 证书吊销检查?
简化版
OCSP Stapling 是服务端提前向 CA 的 OCSP 服务查询证书状态,并在 TLS 握手时把带签名的 OCSP 响应一起发给客户端。
这样客户端不必自己再去访问 CA 的 OCSP 服务,减少握手延迟,也避免暴露用户正在访问哪个站点的隐私。
它优化的是证书吊销检查,但客户端仍要验证 OCSP 响应的签名、有效期和对应证书。
详细版
普通 OCSP 流程是客户端拿到证书后,自己请求 CA 的 OCSP 服务:
Client -> Server: TLS handshake
Client -> CA OCSP: 这张证书是否被吊销
CA OCSP -> Client: good/revoked/unknown
OCSP Stapling 后:
Server -> CA OCSP: 定期查询状态
Server -> Client: TLS 证书 + stapled OCSP response
服务端把 OCSP 响应“钉”在握手里发给客户端。
优点是减少客户端外部请求、降低 CA OCSP 压力、改善隐私和性能。
局限是服务端必须正确缓存和刷新响应,客户端也要决定没有 stapling 时是否继续连接。
完整版教学
1. 先回顾为什么要检查吊销
证书即使还没过期,也可能因为私钥泄露、误签、主体信息变更等原因被吊销。
客户端要知道证书是否仍然可信,就需要吊销检查。
常见方式有 CRL 和 OCSP。
OCSP 是在线查询某张证书状态。
OCSP Stapling 的目标是保留吊销检查能力,同时减少客户端直接访问 CA OCSP 的成本。
2. 普通 OCSP 有什么问题
普通 OCSP 要客户端自己查询 CA。
浏览器 -> 网站:拿证书
浏览器 -> CA OCSP:查证书状态
CA OCSP -> 浏览器:返回状态
问题包括:
- 多一次网络请求,增加 HTTPS 首次连接延迟。
- CA 的 OCSP 服务不可用时影响体验。
- CA 能看到用户正在访问哪些站点,存在隐私问题。
- 大量客户端查询会给 CA 造成压力。
这些问题推动了 OCSP Stapling 的使用。
3. Stapling 的基本流程
服务端定期向 OCSP 响应器查询自己的证书状态。
CA 返回带签名的 OCSP 响应。
TLS 握手时,服务端把这个响应一起发给客户端。
ClientHello
ServerHello
Certificate
CertificateStatus(OCSP response)
Finished
客户端验证这个 OCSP 响应确实由可信机构签发,并且还在有效期内。
4. 优势对比
| 对比项 | 普通 OCSP | OCSP Stapling |
|---|---|---|
| 谁查询 CA | 客户端 | 服务端 |
| 额外延迟 | 客户端可能多一次请求 | 握手内携带 |
| 隐私 | CA 可能知道访问行为 | 更好 |
| CA 压力 | 高 | 低 |
| 服务端复杂度 | 低 | 需要缓存刷新 |
所以它既是性能优化,也是隐私优化。
5. 服务端要注意缓存刷新
OCSP 响应不是永久有效的。
它通常包含:
thisUpdate:响应生成时间。nextUpdate:下次更新前有效。- 证书序列号。
- 证书状态,例如 good、revoked、unknown。
服务端要在过期前刷新缓存。
如果一直发送过期 OCSP 响应,客户端可能拒绝连接或忽略 stapling。
6. Must-Staple 是更严格的场景
有些证书可以带 TLS Feature 扩展,要求客户端必须收到 stapled OCSP 响应。
这常被称为 Must-Staple。
它能提高吊销检查强度,但也带来可用性风险。
如果服务端 OCSP Stapling 配置失败,客户端可能直接拒绝访问。
因此线上使用要确保监控、自动刷新和灰度验证。
7. 常见误区与追问
- 误区:OCSP Stapling 是服务端自己声明证书没问题。 服务端携带的是 CA 签名过的 OCSP 响应,客户端仍会验证。
- 误区:有了 Stapling 就不需要证书链验证。 它只补充吊销状态,不替代证书链和域名校验。
- 误区:Stapling 响应可以永久缓存。 OCSP 响应有有效期,服务端要定期刷新。
- 追问:为什么它改善隐私? 客户端不用直接向 CA 暴露自己正在查询哪个站点证书。
- 追问:CA OCSP 服务挂了会怎样? 已缓存的有效响应仍可使用,过期后可能影响连接策略。
- 追问:Must-Staple 有什么风险? 配置或刷新失败时,客户端可能拒绝访问,造成可用性事故。
8. 加强记忆
OCSP 是客户端查证书状态,OCSP Stapling 是服务端提前查好并带给客户端。
记住 3 个收益:少请求、少泄露、少压力。