要让ssl_stapling_verify on正常工作,必须同时配置ssl_stapling on、ssl_trusted_certificate(含正确顺序的中间+根证书)、resolver(带valid缓存时间)及可达合规的ocsp响应源,缺一不可,否则tls握手将失败。

要让 ssl_stapling_verify on 正常工作、避免 OCSP 装订响应校验失败,关键不是“修复传输过程”,而是确保 Nginx 能在本地完整、可靠地验证已获取的 OCSP 响应。校验失败本质是签名或信任链问题,不是网络加密问题。
必须配齐四项基础配置
单独开启 ssl_stapling_verify on 不仅无效,还会导致 TLS 握手直接中断(如 502 或 handshake failed)。以下四条指令必须同时存在且参数正确:
-
ssl_stapling on;—— 启用 OCSP Stapling 机制本身 -
ssl_stapling_verify on;—— 开启对 OCSP 响应的签名与有效期校验 -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;—— 指向含中间 CA + 根证书的 PEM 文件(顺序:中间在前,根在后) -
resolver 1.1.1.1 8.8.8.8 valid=300s;—— 显式配置 DNS 解析器并设定缓存时间,不可省略valid
重点检查 ssl\_trusted\_certificate 文件
Nginx 不读系统证书库,也不从 ssl_certificate 自动提取信任链。这个文件专用于 OCSP 响应验签,和发给客户端的证书链是两回事:
- 不能直接复用
ssl_certificate路径(它通常不含根证书) - 不能只放根证书(漏掉中间 CA 会导致
no issuer cert matches OCSP responder) - 推荐生成方式:
cat intermediate.crt root.crt > full-chain-trusted.pem - 验证是否有效:
openssl ocsp -issuer intermediate.crt -cert example.com.crt -url http://ocsp.int-x3.letsencrypt.org -CAfile full-chain-trusted.pem -text,输出含Response verify OK才算通过
确认 OCSP 响应源可达且响应合规
Nginx 在 reload 或首次握手时会主动访问证书 AIA 扩展里的 OCSP URL。若该环节失败,ssl_stapling_verify on 就会拒绝连接:
- 用
curl -v https://ocsp.your-ca.com或openssl s_client -connect ocsp.your-ca.com:443 -servername ocsp.your-ca.com测试连通性与 TLS 兼容性 - 注意部分 CA 对 HTTP/1.1、TLS 版本或 SNI 有要求,Nginx 默认行为可能不满足
- 如果 OCSP 地址是 HTTP(如 Let’s Encrypt),需确保防火墙允许出站 HTTP 请求
- 响应必须是标准 OCSP Response ASN.1 格式,且状态为
successful,非 200 状态码或超时均会触发校验失败
排查与验证方法
启用后若出现握手异常,优先查 Nginx error log,搜索以下关键词:
SSL_do_handshake() failedocsp: response verification failedno issuer cert matches OCSP respondererror parsing certificate
客户端侧可运行:openssl s_client -connect example.com:443 -status,观察输出中是否有 OCSP Response Status: successful (0x0) 及 Response Verify Failure 提示。











