Nginx OCSP Stapling 失败时静默关闭,需逐环节验证:①证书含OCSP URI;②resolver显式配置且可达;③OCSP服务器返回200及合法ASN.1响应;④ssl_trusted_certificate含正确顺序的中间+根证书;⑤查error.log关键报错并用openssl s_client实测响应。

OCSP Stapling 响应获取失败,Nginx 通常不报错、不提示、不 fallback,而是静默关闭 stapling 功能。排查不能只看配置是否写上,必须逐环节验证是否真正就绪。
确认证书是否含有效 OCSP URI
这是最前端硬性前提。没有 OCSP 地址,Nginx 根本不会发起请求。
- 运行命令:openssl x509 -in /path/to/your.crt -text -noout | grep -A1 "OCSP"
- 输出中必须出现类似 OCSP - URI:http://ocsp.int-x3.letsencrypt.org 的行
- 若无输出,说明证书缺失 Authority Information Access(AIA)扩展,需联系 CA 补发或更换支持 OCSP 的中间证书
检查 resolver 是否显式配置且可达
Nginx 不读 /etc/resolv.conf,也不走系统 DNS 缓存,必须在配置中显式声明可用 DNS,并能解析 OCSP 域名。
- 确认 server 或 http 块中已写:resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=30s; 和 resolver_timeout 5s;
- 手动测试解析:dig +short ocsp.int-x3.letsencrypt.org @8.8.8.8,应返回 IP 地址
- 若超时或无响应,换用内网可信 DNS,或检查是否被防火墙拦截 DNS 出站请求(UDP 53 端口)
验证 OCSP 响应器本身是否可达且返回合规响应
DNS 解析成功 ≠ OCSP 服务可用。Nginx 要求 HTTP 状态码为 200,且响应体为合法 OCSP ASN.1 数据。
- 用 curl 模拟请求:curl -v -m 5 http://ocsp.int-x3.letsencrypt.org
- 必须返回 HTTP/1.1 200 OK;404、301、503、空响应或 HTML 页面均视为失败
- 私有 CA 的 HTTP 地址(如
http://ocsp.internal-ca.local)可能被 OpenSSL 拒绝,需改用ssl_stapling_file方案
核对 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,说明链不完整或顺序错误
观察 Nginx 错误日志中的关键线索
虽然多数失败静默发生,但 error.log 中仍会出现可定位的线索:
- no resolver defined → 缺少 resolver 指令或未生效于当前 server 块
- ssl_stapling ignored, issuer certificate not found → ssl_trusted_certificate 路径错误、文件为空或缺少根/中间证书
- ocsp: timeout 或 ocsp: verify failed → DNS 可达但网络不通、OCSP 服务不可用、系统时间偏差 >±5 分钟、或签名验证失败
- SSL_CTX_set_ocsp_status_callback failed → OpenSSL 版本过低(需 ≥1.0.1)、Nginx 版本过低(需 ≥1.3.7),或模块未编译启用
用 openssl s_client 实测是否真有响应装订
这是最终验证手段,绕过浏览器缓存与中间代理,直连 Nginx TLS 握手层:
- 命令:openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A 5 "OCSP response"
- 若输出 OCSP response: successful (0x0) 并带响应数据,说明 stapling 已生效
- 若卡顿数秒后才返回 OCSP response: no response sent,说明配置未触发或存在阻塞(如 resolver_timeout 过长、DNS 不稳)


















