内网环境nginx自动ocsp stapling失效,须改用ssl_stapling_file手动缓存方案:保留ssl_stapling on与ssl_stapling_verify on,配置ssl_stapling_file指向本地ocsp响应文件,并确保ssl_trusted_certificate仅含正确顺序的私有根+中间证书,再通过openssl s_client实测验证响应是否成功装订。

内网环境无法连接外部 OCSP 服务器时,Nginx 的自动 stapling(ssl_stapling on)基本失效——不是配置没写对,而是底层机制不支持:resolver 不解析内网域名、OpenSSL 拒绝 HTTP OCSP 地址、私有 CA 的 URI 常为占位符。必须放弃“自动拉取”,改用本地缓存 + 显式验证的组合方案。
停用自动 stapling,改用 ssl_stapling_file
直接禁用依赖网络的自动流程,转为手动获取并定期更新 OCSP 响应文件:
-
删掉或注释掉
resolver、ssl_stapling_verify on(但保留它!见下条)、ssl_stapling on(仍需开启) - 添加
ssl_stapling_file /path/to/your.stapling.ocsp;,指向你生成的二进制 OCSP 响应文件 - 注意:
ssl_stapling_file单独设置无效,必须配合ssl_stapling on和ssl_stapling_verify on才生效
确保 ssl_trusted_certificate 仅含私有根+中间证书
Nginx 验证 OCSP 响应签名时,只认这个文件里的证书链,且顺序严格:
- 文件中不能出现站点证书,也不能混入公网 CA(如 Let’s Encrypt 根证书)
- 顺序必须是:私有根证书 → 私有中间证书(从上到下拼接)
- 用命令校验是否可用:
openssl ocsp -verify_other ca.crt -CAfile internal-trust.pem -respin your.stapling.ocsp -text
输出含Response verify OK才算通过
手动拉取并定期更新 OCSP 响应
在内网机器上,用 openssl ocsp 直连你的私有 OCSP 响应器(即使它是 HTTP):
- 先确认服务可达:
curl -v http://ocsp.internal-ca.local - 构造请求(注意 issuer 必须匹配中间证书,cert 是你的域名证书):
openssl ocsp -issuer intermediate.crt -cert example.com.crt -url http://ocsp.internal-ca.local -respout /path/to/your.stapling.ocsp -text - 响应有效期由
nextUpdate字段决定,建议用 cron 每 12 小时检查一次是否过期,过期前重拉
验证是否真正生效
别信配置写了就完事,要实测 Nginx 是否真把响应发给了客户端:
- 用 OpenSSL 测试:
openssl s_client -connect your.site:443 -status -servername your.site 2>&1 | grep -A17 "OCSP response" - 若看到
OCSP Response Status: successful (0x0)且有详细响应数据,说明已装订成功 - 若显示
no response sent,重点检查:ssl_stapling_verify on是否遗漏、ssl_trusted_certificate路径是否正确、.ocsp文件时间戳是否过期











