ssl_stapling_verify on 用于启用 nginx 对 ocsp 响应的签名、有效期及签发者可信链的本地强制校验,必须与 ssl_stapling on、ssl_trusted_certificate(含正确顺序的中间+根证书)和 resolver 共同配置于同一 server 块,缺一不可,否则 tls 握手失败。

ssl_stapling_verify 本身不直接“验证响应状态”,而是控制 Nginx 是否对 OCSP 响应进行签名和有效性校验。它验证的是 OCSP 响应的**合法性与可信性**,而非 HTTP 状态码(如 200/404/500)。
它验证什么
启用 ssl_stapling_verify on 后,Nginx 会检查:
- OCSP 响应是否由证书中指定的 OCSP 签发者(或其信任链上的 CA)签名
- 签名是否使用受信任的 CA 根证书或中间证书验证通过
- 响应是否在有效期内(
nextUpdate时间未过期) - 响应中的证书状态是否为
good(非revoked或unknown)
它不验证什么
该指令不会检查:
- OCSP 请求是否返回 HTTP 200 —— 即使后端 OCSP responder 返回 500 或超时,只要 Nginx 没收到可解析的响应,stapling 就会失败(日志报错),但这不是
ssl_stapling_verify的职责 - OCSP 响应体格式是否符合 RFC 6960 —— 解析失败属于底层 OpenSSL 行为,Nginx 不做额外格式校验
- OCSP 响应是否被篡改(除签名外)—— 签名验证已覆盖完整性
如何判断验证是否成功
实际效果需结合日志与客户端行为观察:
- 开启
error_log /path/to/log info;,若出现SSL_do_handshake() failed (SSL: ... OCSP response error)或no suitable certificate found for OCSP stapling,说明 stapling 失败,ssl_stapling_verify可能因校验不通过而拒绝使用该响应 - 用
openssl s_client -connect example.com:443 -status连接,查看输出中是否有OCSP response:及其状态(如response_status: successful (0x0)和cert status: good) - 若
ssl_stapling_verify on且 OCSP 响应不可信(如签名无效、过期、CA 不在 trusted_ca.crt 中),Nginx 会丢弃该响应,退回到不发送 stapling 数据的状态(即 TLS 握手中无 CertificateStatus 消息)
关键配置前提
仅开启 ssl_stapling_verify on 不足以生效,必须配套:
-
ssl_stapling on;—— 启用 stapling 功能 -
ssl_trusted_certificate /path/to/trusted_ca.crt;—— 提供包含 OCSP 签发者证书及其上级 CA 的 PEM 文件(不能只用站点证书的ssl_certificate) - 确保系统时间准确(OCSP 时间戳校验严格)
- OCSP responder 可达且响应及时(建议配合
ssl_stapling_responder显式指定地址)











