验证Nginx OCSP Stapling是否生效,需确认三件事:Nginx是否成功获取并缓存有效OCSP响应、是否在TLS握手中正确装订、是否严格执行签名与时间校验;须通过日志检查、openssl命令测试、抓包验证及异常模拟综合判定。

要验证生产环境中 Nginx OCSP Stapling 的证书吊销防护是否真正生效,不能只看配置有没有写上,关键得确认三件事:Nginx 是否成功获取并缓存了有效 OCSP 响应、是否在 TLS 握手时正确装订、以及是否严格执行了签名与时间校验。下面从实操角度分步说明。
确认 OCSP 响应已成功获取并缓存
Nginx 启动或重载后会主动向证书 AIA 扩展中指定的 OCSP 地址发起 HTTP 请求。若失败,ssl_stapling_verify on 会直接拒绝握手(返回 502 或握手中断),而不是降级发送空或伪造响应。
- 检查 Nginx 错误日志是否有类似 "no responder URL in certificate" 或 "OCSP response error" 的报错
- 用 OpenSSL 模拟验证:运行
openssl ocsp -issuer intermediate.crt -cert example.com.crt -url http://ocsp.int-x3.letsencrypt.org -text,观察是否返回 responseStatus: successful 和 certStatus: good - 确认系统时间偏差 ≤ ±5 分钟(
ntpq -p或timedatectl status),否则 OCSP 响应会被视为过期而丢弃
验证 TLS 握手是否实际携带 stapled 响应
客户端只有收到有效的 stapled 响应,才会跳过自身 OCSP 查询。这一步必须通过真实握手抓包或工具检测。
- 使用
openssl s_client -connect example.com:443 -status连接站点,查看输出中是否包含 OCSP Response Data 及其状态(如 certStatus: good) - 用 Wireshark 抓取 TLS 握手包,在 Server Hello 后的 Certificate 扩展中查找 status_request_v2 或 OCSP 响应体
- 浏览器开发者工具的 Security 标签页中,点开“证书”→“详细信息”,部分 Chrome/Firefox 会显示 “OCSP 响应:有效” 或类似提示
验证 ssl_stapling_verify 是否真正起作用
开启 ssl_stapling_verify on 后,Nginx 不再信任任何未经本地验证的 OCSP 数据。它会逐项核验:
- 响应签名是否由 ssl_trusted_certificate 中指定的中间 CA 或其授权响应器签发
- ThisUpdate 和 NextUpdate 时间是否落在当前系统时间 ±5 分钟窗口内
- 响应所针对的证书序列号和颁发者是否与当前站点证书完全一致
- 若任意一项失败(例如手动篡改响应、DNS 返回错误 IP、CA 服务器时间异常),Nginx 就不会装订该响应,TLS 握手将失败而非妥协
模拟异常场景测试防护强度
真正的安全防护要在失效时依然可控。建议人为触发几种典型异常,观察 Nginx 行为是否符合预期:
- 临时屏蔽出站 HTTP 访问(如 iptables DROP 端口 80),重载 Nginx,确认新连接是否因无法获取响应而失败(不是静默跳过)
- 将系统时间调快 6 分钟,再请求 HTTPS 页面,应出现握手失败或证书警告(而非继续装订过期响应)
- 把 ssl_trusted_certificate 文件中删掉中间证书,仅保留根证书,重启后应报验签失败,且不再提供 stapling











