OCSP Stapling未生效时客户端会自行查询CA导致延迟、隐私泄露或连接失败;需通过抓包验证外部OCSP请求、检查四项配置(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver)、确认证书含OCSP URI、排查Nginx错误日志并用openssl命令实测响应。

OCSP Stapling 未生效时,客户端会自行向 CA 的 OCSP 服务器发起查询,造成握手延迟、隐私泄露甚至连接失败。排查不能只看配置是否写上,关键要验证“Nginx 是否真把 OCSP 响应装订进 TLS 握手”。以下是直接可操作的排查路径:
确认客户端是否仍在发起外部 OCSP 请求
这是判断问题是否存在的第一步。用浏览器开发者工具(Network → Filter 输入 ocsp)或抓包工具(如 Wireshark)观察 TLS 握手后是否有对 ocsp.digicert.com、ocsp.sectigo.com 或 Let’s Encrypt 的 ocsp.int-x3.letsencrypt.org 等域名的 HTTPS 请求。若有,说明 Stapling 没起作用,客户端被迫自己查。
检查 Nginx 配置是否真正满足四项硬性条件
缺一不可,漏掉任意一条都会导致 Stapling 静默关闭(Nginx 不报错,但不发响应):
- ssl_stapling on; —— 必须显式开启,不能依赖默认值
- ssl_stapling_verify on; —— 启用后若验证失败,Stapling 自动禁用且无明确日志提示
- ssl_trusted_certificate 指向完整信任链文件(根证书 + 所有中间证书),不是你的域名证书,也不是 ssl_certificate 所用的 fullchain.pem(二者内容顺序和用途不同)
- resolver 显式配置且可用:Nginx 不读 /etc/resolv.conf;推荐写多个 DNS(如 8.8.8.8 1.1.1.1 223.5.5.5),并带 valid=300s 和 resolver_timeout 5s
验证证书本身是否支持 OCSP
若证书没嵌入 OCSP 查询地址,Nginx 根本找不到目标服务器,自然无法拉取响应:
- 运行:openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"
- 正常应输出类似:OCSP - URI:http://r3.o.lencr.org
- 若无输出,或 URI 域名无法 ping 通/ curl -I 失败,需联系 CA 补发含 Authority Information Access 扩展的新证书
查看 Nginx 错误日志与实测响应
重启 Nginx 后,立即检查 error.log 中是否出现以下关键词:
- no resolver defined → 缺少 resolver 指令
- issuer certificate not found → ssl_trusted_certificate 路径错误,或文件中缺少根/中间证书
- verify failed 或 timeout → OCSP 响应签名无效、时间戳超差(系统时间不准)、DNS 解析失败或网络不通
再执行终端验证命令:
openssl s_client -connect example.com:443 -servername example.com -status -tlsextdebug 2>&1 | grep -A 2 "OCSP response"
成功应显示:OCSP Response Status: successful (0x0) 和 CertStatus: good;若只显示 OCSP response: no response sent,说明 Stapling 完全未触发。











