生产环境启用OCSP Stapling需四层防线:显式配置resolver_timeout 5s、多DNS容错(如8.8.8.8 1.1.1.1 223.5.5.5 valid=300s)、ssl_trusted_certificate指向完整中间链、ssl_stapling_file文件兜底+定时刷新,并通过iptables屏蔽DNS等故障模拟验证生效。

生产环境启用 OCSP Stapling 不能只写 ssl_stapling on 就完事——DNS 解析卡住、CA 域名不可达、证书链不全,任何一个环节出问题都会导致 TLS 握手阻塞或 stapling 静默失效。真正可靠的做法是:显式控制 DNS 超时、多源容错解析、可信证书链验证、文件兜底+自动刷新,四层防线缺一不可。
必须显式配置 resolver 和 resolver_timeout
Nginx 不读系统 /etc/resolv.conf,且默认 resolver_timeout 是 30 秒,远超 TLS 握手容忍极限。一旦 OCSP 域名(如 ocsp.int-x3.letsencrypt.org)解析慢或失败,用户将遭遇近半分钟连接挂起。
- 在
http或server块中添加:resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=300s; - 紧随其后写明:
resolver_timeout 5s; - 若服务器有本地可信 DNS(如 dnsmasq、CoreDNS),优先用:
resolver 127.0.0.1 valid=300s;,更安全且降低外网依赖
ssl_trusted_certificate 必须指向完整中间证书链
ssl_stapling_verify on 开启后,Nginx 需用中间证书验证 OCSP 响应签名。仅靠 ssl_certificate 中的 fullchain.pem 不够稳定——某些版本 Nginx 在 reload 时可能未正确提取中间证书。
- 单独准备中间证书文件(例如
/etc/nginx/ssl/example.com.chain.pem),内容为 CA 提供的中间证书(不含站点证书) - 配置项写为:
ssl_trusted_certificate /etc/nginx/ssl/example.com.chain.pem; - Let’s Encrypt 用户可直接复用
chain.pem;GlobalSign、DigiCert 等需从 CA 官网下载对应中间证书
推荐启用 ssl_stapling_file + 定时刷新机制
纯运行时 DNS 查询存在单点风险。加一层文件兜底,既规避网络抖动影响,又便于故障隔离和灰度验证。
- 创建缓存目录并授权:
sudo mkdir -p /var/lib/nginx/ocsp && sudo chown www-data:www-data /var/lib/nginx/ocsp - 首次生成响应文件(以 Let’s Encrypt 为例):
openssl ocsp -issuer /etc/letsencrypt/live/example.com/chain.pem \<br> -cert /etc/letsencrypt/live/example.com/fullchain.pem \<br> -url http://ocsp.int-x3.letsencrypt.org/ \<br> -respout /var/lib/nginx/ocsp/example.com.ocsp
- 在 server 块中启用:
ssl_stapling_file /var/lib/nginx/ocsp/example.com.ocsp; - 添加每日更新 cron(避免响应过期):
0 2 * * * /usr/bin/openssl ocsp -issuer /etc/letsencrypt/live/example.com/chain.pem -cert /etc/letsencrypt/live/example.com/fullchain.pem -url http://ocsp.int-x3.letsencrypt.org/ -respout /var/lib/nginx/ocsp/example.com.ocsp >/dev/null 2>&1
验证是否真正生效且兜底可用
配置写完不等于跑通。必须模拟真实故障场景验证三层响应能力:
- 临时屏蔽所有 DNS:
sudo iptables -A OUTPUT -p udp --dport 53 -j DROP - 用 openssl 检查 stapling 状态:
openssl s_client -connect example.com:443 -status -servername example.com 2>/dev/null | grep -A 1 "OCSP response" - 成功表现应为:
OCSP response: OCSP Response Data: OCSP Response Status: successful (0x0),且无超时或 connection refused 提示 - 恢复 DNS 后,再验证自动模式是否正常(即去掉
ssl_stapling_file,仅靠 resolver 工作)


















