要让 ssl_stapling_verify on 真正保障 OCSP 响应的真实性与合规性,关键不是单独打开这个开关,而是必须同时启用 ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate(含顺序正确的中间+根证书)和 resolver(带 valid 缓存时间)四项配置,缺一不可,否则 TLS 握手将直接中断。

要让 ssl_stapling_verify on 真正保障 OCSP 响应的真实性与合规性,关键不是单独打开这个开关,而是构建一条完整、可信、可执行的本地验证链。它不校验“传输过程”,而是强制 Nginx 在响应发出前,完成签名验证、时间有效性检查和证书身份匹配——任一失败即拒发,避免把伪造或过期状态透传给客户端。
必须同时启用四项基础配置
缺一不可,否则 TLS 握手会直接中断(如 502 或 handshake failed):
- ssl_stapling on; —— 启用 OCSP 装订机制本身,不开启则无响应可验
- ssl_stapling_verify on; —— 开启对 OCSP 响应的签名、有效期和证书 ID 的强制校验
- ssl_trusted_certificate /path/to/full-chain-trusted.pem; —— 指向含中间 CA + 根证书的 PEM 文件,顺序必须是中间在前、根在后
- resolver 1.1.1.1 8.8.8.8 valid=300s; —— 显式配置 DNS 解析器并设定缓存时间,Nginx 不读系统 resolv.conf
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 版本(如强制 TLS 1.2+)、SNI 或 Host 头有要求,Nginx 默认行为可能不满足
- OCSP 响应必须是标准 ASN.1 格式,状态为
successful,HTTP 非 200、超时、重定向或格式错误均触发校验失败 - 服务器系统时间偏差超过 5 分钟,常导致
thisUpdate/nextUpdate时间窗校验失败
验证是否真正生效
不能只看配置是否存在,要实测响应是否被验证后缓存并正确下发:
- 用
openssl s_client -connect yourdomain.com:443 -status连接,检查输出中是否有:
OCSP Response Status: successful (0x0)
Cert Status: good
且无Response Verify Failure - 查看 Nginx error log,搜索
OCSP response error、no issuer cert或verify error,这些是配置不到位的直接线索 - 抓包分析 TLS 握手阶段的
certificate_status扩展内容,确认其中 OCSP 响应为 DER 编码、含有效签名及合理nextUpdate时间


















