nginx 原生 ssl_stapling 无备用缓存时间配置,容灾依赖 ssl_stapling_file 预加载可信 ocsp 响应文件,并须与 ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate 和 resolver 四项共存方可生效。

直接靠 Nginx 原生的 ssl_stapling 机制,没有“备用缓存时间”这个配置项。它本身不提供过期后降级使用旧响应、或延长缓存有效期的选项。所谓“避免 CA 宕机影响访问”,关键不是延长缓存,而是提前准备好有效响应文件,并控制其生命周期——这才是真正可靠的容灾方案。
用 ssl_stapling_file 实现可控的“备用响应”
Nginx 支持通过 ssl_stapling_file 指令加载本地 DER 格式的 OCSP 响应文件。这个文件是你自己生成、校验并维护的,完全脱离 CA 服务器实时依赖:
- 响应文件可预生成(比如用
openssl ocsp工具离线获取),确保内容有效、签名可信 - 只要文件存在且未被篡改,Nginx 就会在 TLS 握手时直接装订,不管 CA 的 OCSP 服务是否可达
- 你掌握更新节奏:可每天定时更新一次,也可在证书续期后立即刷新,不受 CA 稳定性影响
配合基础 stapling 配置形成双保险
ssl_stapling_file 不是替代原生 stapling,而是与它协同工作。必须同时配齐四项基础指令,否则文件不会被加载:
-
ssl_stapling on;—— 启用装订功能 -
ssl_stapling_verify on;—— 强制校验响应签名和时间窗口(含你提供的文件) -
ssl_trusted_certificate /path/to/ca-bundle.pem;—— 提供完整信任链,用于验证 OCSP 响应本身 -
resolver 8.8.8.8 1.1.1.1 valid=300s;—— 即使不用实时拉取,也需存在;否则 Nginx 可能拒绝加载 stapling_file
如何让“备用响应”真正可用
光有文件还不够,得保证它始终处于可被信任的状态:
- 生成时指定足够宽的
nextUpdate时间(如 7 天),但不要超过证书本身的吊销窗口 - 把文件放在 Nginx 有读权限的路径,且确保 SELinux 或文件系统权限不阻止访问
- 在 Nginx 配置中明确指定:
ssl_stapling_file /etc/nginx/ssl/example.com-ocsp.der; - 每次更新文件后,用
openssl ocsp -respin /path/to/file.der -text检查是否解析成功、状态为cert status: good
为什么不能只靠“延长缓存”
Nginx 原生 stapling 的缓存策略是固定的:默认有效期由 OCSP 响应中的 nextUpdate 字段决定,Nginx 不会主动跳过校验去用过期响应。一旦响应过期且无法刷新(CA 宕机),stapling 就静默失效,客户端退回传统 OCSP 查询——这正是你要避免的卡顿源头。所以,可控的本地文件 + 严格校验 + 定期更新,才是面向生产环境的稳健做法。











