OCSP Stapling 缓存有效期由 CA 签发的 Next Update 时间戳决定,Nginx 取其与 ssl_stapling_cache_timeout 的最小值;若 Next Update 过短(如仅1小时),即使配置长缓存,Nginx 仍会频繁重查,导致延迟回升150–300ms。

OCSP Stapling 响应有效期太短,会导致 Nginx 频繁向 CA 的 OCSP 服务器发起 HTTP 查询,不仅增加上游网络压力、拖慢 TLS 握手(尤其在 resolver 不稳时),还可能触发 DNS 超时或 OCSP 响应失败,最终使 stapling 静默关闭——客户端退回自行查询,延迟回升 150–300ms。
确认当前 OCSP 响应缓存的实际有效期
Nginx 默认不暴露 OCSP 响应的原始有效期,需通过 OpenSSL 手动解析已缓存或实时获取的响应:
- 若已配置 ssl_stapling_file(如
/var/lib/nginx/ocsp/example.com.ocsp),直接解析该文件:openssl ocsp -respin /var/lib/nginx/ocsp/example.com.ocsp -text | grep -E "(Produced At|Next Update)" - 若未启用
ssl_stapling_file,可临时用命令模拟 Nginx 查询行为(需确保ssl_trusted_certificate和 OCSP URL 正确):openssl ocsp -issuer intermediate.crt -cert example.com.crt -url http://ocsp.int-x3.letsencrypt.org -CAfile /path/to/trusted-ocsp-ca.pem -text
重点关注 Next Update 字段——它才是 CA 签发的响应有效期终点,Nginx 缓存策略以它为准,而非固定时间。
理解 Nginx 实际使用的缓存逻辑
Nginx 并不强制使用你设的 valid=300s 或 ssl_stapling_cache_timeout 作为最终过期时间。它严格遵循 OCSP 响应体中 CA 签发的 Next Update 时间戳,并取两者最小值:
- Let’s Encrypt 的 OCSP 响应 Next Update 通常为 4 小时(14400 秒),但部分中间证书(如旧版 DST Root X3)或私有 CA 可能只设 1–2 小时;
-
ssl_stapling_cache_timeout是 Nginx 1.11.0+ 引入的指令,仅控制内存中响应的最长保留时间,不会延长 CA 设定的 Next Update; - 若 CA 返回的 Next Update 过短(如 3600 秒),即使你配了
ssl_stapling_cache_timeout 86400,Nginx 仍会在 1 小时后丢弃并重新请求。
定位短有效期的根源是证书链还是 CA 策略
短有效期往往不是 Nginx 配置问题,而是上游决定的:
- 检查你使用的中间证书是否为最新版:Let’s Encrypt 已停用 DST Root X3,切换至 ISRG Root X1 后,OCSP 响应有效期普遍提升至 4 小时以上;
- 运行
openssl x509 -in /path/to/intermediate.crt -text -noout | grep "Validity",确认中间证书自身未临近过期(过期前 30 天内,CA 可能主动缩短 OCSP 响应有效期); - 对比不同域名证书的 OCSP 响应:若多个站点共用同一中间证书但有效期差异大,说明是 CA 对该证书的动态策略(如高风险域名降级有效期)。
缓解频繁请求的实用措施
无法改变 CA 的 Next Update 时,可通过以下方式降低影响:
- 启用 ssl_stapling_file + 定时任务预刷新:将 OCSP 响应持久化到磁盘,配合 cron 每 2 小时执行一次
openssl ocsp -... -out /path/to/ocsp-file,避免全靠 Nginx 启动/重载时首次拉取; - 调大 resolver valid(如
valid=3600s):减少 DNS 解析频次,防止因反复查ocsp.int-x3.letsencrypt.org加剧延迟; - 确保 resolver_timeout 5s 已设置:避免单次 OCSP 查询卡住整个 worker 进程;
- 监控日志关键词:
stapling is not configured for this server(配置缺失)、no responder certificate presented(响应无签名)、response timed out(超时)——这些都可能被误判为“有效期短”,实则是校验失败后反复重试。


















