OCSP Stapling 不生效排查
OCSP 装订由服务端在握手时附带吊销状态响应,客户端无需再单独查询响应者,既省时又减少隐私泄露。配置之后必须验证是否真的生效:用 s_client -status 查看握手响应里是否包含 OCSP Response 区段。不生效常见于三个原因——缺少 resolver、缺少 ssl_trusted_certificate,或者服务器访问不到 OCSP 端点。
基本信息
| 验证命令 | s_client -status 查看 OCSP Response 区段 |
|---|---|
| 必要配置 | ssl_stapling on、ssl_stapling_verify on 与 ssl_trusted_certificate |
| 网络前提 | 解析器可达且能解析 OCSP 域名 |
| 证书前提 | 签发该证书的 CA 必须提供 OCSP 端点 |
| 缓存行为 | 服务端会缓存响应并在后台刷新 |
典型使用场景
- 启用装订后验证是否真的生效
- 排查「配置了却没有装订响应」
- 评估外部解析器不可达带来的影响
- 与直接查询 OCSP 对比,选择更适合的吊销检查方式
- 把装订验证纳入上线检查清单
验证与服务端配置
验证与服务端配置
echo | openssl s_client -connect example.com:443 -servername example.com -status 2>/dev/null | grep -A3 -i 'OCSP response'
nginx -T | grep -nE 'ssl_stapling|ssl_trusted_certificate|resolver'
# 确认证书里是否声明了 OCSP 端点
openssl x509 -in cert.pem -noout -text | grep -A2 'OCSP'nginx 参考配置
nginx 参考配置
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
resolver 223.5.5.5 1.1.1.1 valid=300s;
resolver_timeout 5s;不生效原因
| 原因 | 表现 | 处理 |
|---|---|---|
| 缺少 resolver | 响应始终为空 | 配置可达的 DNS 解析器 |
| 缺少信任文件 | 无法验证响应签名 | 配置 ssl_trusted_certificate |
| 端点不可达 | 日志中有获取失败记录 | 检查出口策略与 DNS |
| CA 无 OCSP 端点 | 永远不会出现响应 | 改用 CRL 或其他吊销方案 |
resolver 需要选择本机实际可达的解析服务,使用不可达或被劫持的 DNS 会让装订长期失败;如果签发该证书的 CA 根本不提供 OCSP 端点,那么无论怎样配置都不会生效。
验证要点:装订失败通常不会影响业务可用性,因此问题容易被长期忽略。把「握手响应中是否包含装订内容」做成例行巡检项,比依赖故障暴露更可靠;同时记录服务端日志中的获取失败信息,能帮助区分是网络问题还是配置问题。
补充:装订响应由服务端缓存并在后台更新,首次启动后的短时间内可能拿不到响应,属于正常现象。排查时先多请求几次或稍等片刻再判断,可以少走不少弯路。