在离线环境中,nginx可通过ssl_stapling_file手动加载der格式ocsp响应文件实现无网络依赖的ocsp stapling,需配合ssl_stapling on、ssl_stapling_verify on及正确配置的ssl_trusted_certificate,并定期人工更新过期响应。

在完全离线或网络受限的生产环境中,Nginx 无法自动向 CA 的 OCSP 服务器发起请求,ssl_stapling on 默认行为会失效。此时可通过 ssl_stapling_file 手动加载已预获取的 OCSP 响应文件,实现“无网络依赖”的 OCSP Stapling,既保持 TLS 握手时的证书状态验证能力,又避免握手阻塞和隐私泄露。
ssl_stapling_file 的作用与限制
该指令让 Nginx 跳过实时 OCSP 查询,直接从本地磁盘读取一个二进制格式的 OCSP 响应(DER 编码),并在 TLS 握手中原样发送给客户端。它不替代 ssl_stapling_verify —— 后者仍会校验该文件签名的有效性、时间戳是否在有效期内(nextUpdate)、以及是否由可信 CA 签发。
关键限制:
- 文件必须是标准 DER 格式 OCSP 响应(非 PEM),否则 Nginx 启动报错或 stapling 被忽略
- 响应必须对应当前
ssl_certificate中的服务器证书,且签名需能被ssl_trusted_certificate验证 - 文件内容过期后(超过
nextUpdate时间),Nginx 不会自动刷新,需人工更新
生成合法的 OCSP 响应文件(离线可用)
需在有网络、可访问 CA OCSP 服务的临时环境(如开发机或跳板机)中完成一次获取,并确保结果可复用:
- 确认证书链完整:使用
openssl x509 -in fullchain.pem -noout -text | grep "OCSP"查出 AIA 中的 OCSP URL;若无,需从 CA 官网查到正确地址(如 Let’s Encrypt 为http://ocsp.int-x3.letsencrypt.org) - 准备验证链:
ssl_trusted_certificate所指文件必须含签发该证书的中间 CA + 根 CA(顺序:中间在前,根在后) - 执行获取命令(输出为 DER 格式):
openssl ocsp -issuer intermediate.crt -cert example.com.crt -url http://ocsp.int-x3.letsencrypt.org -header Host ocsp.int-x3.letsencrypt.org -respout /tmp/example.ocsp - 验证响应有效性:
openssl ocsp -respin /tmp/example.ocsp -text -CAfile full-chain-trusted.pem,确认显示Response verify OK且Next Update在未来
Nginx 配置要点(离线场景专用)
除启用 stapling 和验证外,必须显式禁用自动查询行为,防止因网络不可达导致警告或功能降级:
-
ssl_stapling on;—— 必须开启,否则不发送 stapled 响应 -
ssl_stapling_verify on;—— 强烈建议开启,否则失去安全意义 -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;—— 指向含中间+根证书的 PEM,用于校验.ocsp文件签名 -
ssl_stapling_file /var/lib/nginx/ocsp/example.ocsp;—— 指向 DER 格式响应文件(注意路径权限,nginx worker 用户需有读取权) -
resolver 127.0.0.1 valid=1s;或直接省略 resolver —— 因不发起 DNS 查询,可设为无效地址或不配置(Nginx ≥ 1.11 会静默忽略) - 移除
ssl_stapling_responder和所有依赖网络的指令(如resolver_timeout)
维护与更新策略
OCSP 响应有明确有效期(通常 4–7 天),离线环境需建立人工或半自动更新机制:
- 记录每次生成的
Next Update时间,提前 24 小时安排更新任务 - 可编写脚本,在有网环境定期拉取新响应并 scp 到目标服务器,配合 systemd timer 或 cron 触发
- 上线前务必测试:
openssl s_client -connect yourdomain.com:443 -status -servername yourdomain.com 2>&1 | grep "OCSP Response Status",应返回successful (0x0) - 建议将
.ocsp文件与证书一起版本化管理,便于回滚和审计











