OCSP Stapling (OCSP 装订)
定义
OCSP Stapling 是 TLS 服务器把 CA 签名、带有效期的 OCSP 响应随握手一起发给客户端的机制,浏览器因此不必再自己去问 CA。
OCSP Stapling 指由服务器而不是浏览器去 CA 取回签名的 OCSP 响应,并在 TLS 握手时把它“钉”在证书后面一起发给客户端。客户端通过 RFC 6066 定义的 status_request 扩展来请求它;在 TLS 1.3 中,响应放在 Certificate 消息里。响应由 CA 签名且有有效期,服务器既无法伪造,也不能无限期重放一个旧的 good 状态。
为什么重要
开启 Stapling 后,CA 只会看到服务器每隔几小时来取一次响应,而不是每个访客都去查询:既省掉一次网络往返,也不再暴露用户的访问记录。不过前提是证书里确实有 OCSP 地址。SC-063 投票让 OCSP 变成可选后,部分 CA 只发布 CRL;Let's Encrypt 自 2025-05-07 起签发的新证书不再带 OCSP 地址,这类证书开了 Stapling 也没有东西可“钉”,服务器会直接跳过。
例子
nginx 配置:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
检查服务器是否下发了 Stapling 响应:
openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>/dev/null | grep -i "ocsp response"
看到 OCSP Response Status: successful 说明已下发;OCSP response: no response sent 说明没有。nginx 是懒加载,重载配置后的第一个连接可能拿不到响应,多试几次再下结论。国内服务器若 resolver 指向的 DNS 无法解析 CA 的响应地址,也会一直没有响应。
常见误区
- 开了 Stapling 就能强制吊销检查。 没有 Must-Staple 时,客户端收不到响应一般照样继续连接;Stapling 改善的是速度和隐私,而不是强制力。
- 证书没有 OCSP 地址时开启 Stapling 会导致网站打不开。 nginx 只会在错误日志里给出警告,握手照常完成,只是不带响应。
- 只写 ssl_stapling on 就够了。 还需要配置 resolver,让 nginx 能解析响应服务器的域名,并提供签发者证书用于校验取回的响应。