CertH certH
本页目录

OCSP Stapling 详解(以及它为什么是可选项)

更新于 2026-11-03 · 5 分钟阅读

吊销检查是证书链上最薄弱的一环:浏览器必须去问第三方这张证书是否还有效,而这一问就把访客暴露给了 CA。stapling 把这个答案挪进了握手里面。

普通 OCSP 的问题

浏览器拿到证书后,可以去查 CA 的 OCSP 响应器,确认证书有没有被吊销。这个请求是对第三方的另一条连接,增加延迟,并且在页面还没加载前就暴露了访客正在连哪个站点。

如果响应器很慢或不可达,不同浏览器要么放行(忽略这次检查),要么阻断(拒绝访问)。两种都不好。

stapling 改变了什么

用了 stapling,服务器自己去取那份签名过的 OCSP 响应,缓存起来,再附到 TLS 握手里。浏览器不用联系任何第三方就拿到了吊销状态,于是既没有额外往返,也没有泄露。

它同时去掉了「访客所在网络必须能连上 CA」这个依赖——在 OCSP 响应器时不时被屏蔽的地区,这一点很实际。

开启与验证

在 nginx 上,stapling 需要 resolver 和证书链文件,缺任何一个都会静默失效。在 Apache 上,缓存指令必须放在 server 级别。重载之后一定要从外部验证——写了配置但没生效,和根本没写,看起来一模一样。

# nginx
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;

# verify from outside — look for a stapled response, not just "OCSP response: none"
openssl s_client -connect example.com:443 -status -servername example.com </dev/null 2>/dev/null | grep -A3 "OCSP Response Status"

为什么 A+ 不强制要求它

stapling 是隐私和延迟上的改进,不是协议强度的改进。不做 stapling 的服务器,并不像只支持 TLS 1.0 的服务器那样「更不安全」。CertH 把它当作配置健康度里的一个正面信号,但不作为最高评级的必要条件。

话虽如此,它是最便宜的收益之一:两行配置,对客户端零影响,对每一位访客都有可测量的隐私提升。

FAQ

CA 的响应器挂了,stapling 会失效吗?

服务器会继续使用最后一次缓存的响应,直到它过期。nginx 在刷新失败时会回退到缓存副本——这也是为什么想要稳定行为,resolver 和有效的证书链文件都是必需的。

值得开启 must-staple 吗?

只有在 stapling 极其稳定的前提下才值得。must-staple 扩展会让客户端在拿不到 stapled 响应时直接拒绝连接,于是缓存或 resolver 的一次故障就变成了全站不可用。

继续阅读