nginx ocsp stapling 静默失效需主动验证五环节:证书含ocsp uri、resolver显式配置且可达、ocsp服务器返回200响应、ssl_trusted_certificate仅含正确顺序的中间+根证书、四条指令共存于同一server块。

排查 Nginx 无法访问 CA 的 OCSP 服务器导致 Stapling 获取失败,关键不是看日志里有没有报错,而是主动验证每个依赖环节是否真正就绪——因为 Nginx 在多数失败场景下会静默关闭 stapling,不提示、不报错、不 fallback。
确认证书是否提供有效 OCSP 地址
这是最前端的硬性前提。没有 OCSP URI,Nginx 根本不会发起请求。
- 运行命令:
openssl x509 -in /path/to/your.crt -text -noout | grep -A1 "OCSP" - 输出中必须出现类似 OCSP - URI:http://ocsp.int-x3.letsencrypt.org 的行
- 若无输出,说明证书未嵌入 AIA 扩展,需联系 CA 重新签发或更换支持 OCSP 的中间证书
验证 resolver 是否可用且能解析 OCSP 域名
Nginx 不读 /etc/resolv.conf,也不走系统 DNS 缓存,必须显式配置且可连通。
- 检查 Nginx 配置中是否已写:
resolver 1.1.1.1 8.8.8.8 valid=300s;和resolver_timeout 5s; - 在服务器上手动测试解析:
dig +short ocsp.int-x3.letsencrypt.org @1.1.1.1 - 若超时或无响应,换用内网可信 DNS(如
223.5.5.5)或添加resolver ipv6=on;(若网络支持 IPv6)
检查 OCSP 响应器本身是否可达与合规
即使 DNS 解析成功,OCSP 服务也可能不可达、返回错误或格式异常。
- 用 curl 模拟 Nginx 请求:
curl -v -m 5 http://ocsp.int-x3.letsencrypt.org - 关注返回状态码:必须是 200;不能是 404、301、503 或空响应
- 若返回 HTML 页面(如“Welcome to nginx”),说明 OCSP 地址被反代或配置错误,非真实响应器
- 私有 CA 环境下,HTTP OCSP 地址(如
http://ocsp.internal-ca.local)可能因 OpenSSL 限制不被支持
验证 ssl_trusted_certificate 文件是否完整可信
这个文件是 OCSP 响应签名验证的唯一依据,出错会导致 stapling 被跳过,且无明确提示。
- 确保文件只含中间证书 + 根证书,顺序为中间在前、根在后,不含站点证书
- 用命令校验:
openssl ocsp -issuer intermediate.crt -cert example.com.crt -url http://ocsp.int-x3.letsencrypt.org -CAfile /etc/nginx/ssl/trusted-ocsp-ca.pem -text - 成功标志是输出含 Response verify OK 或 response is good;若提示 unable to get local issuer certificate,说明链不完整或顺序错误
不复杂但容易忽略:所有指令必须共存于同一 server { ... } 块内,且同时启用 ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate 和 resolver。缺一不可,否则静默失效。











