直接在 nginx 的 server 块里加 ssl_stapling on 无效,ocsp stapling 必须同时满足五项前提(nginx≥1.3.7、证书含有效 ocsp uri、系统时间误差≤±5分钟、证书链完整、服务器能直连 ocsp 地址)并配置四条核心指令(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver),缺一不可,否则静默失效。

直接在 Nginx 的 server 块里加 ssl_stapling on 是无效的。OCSP Stapling 是一套需全部满足、协同工作的机制,必须同时达成五项前提,并在 HTTPS server 块中写全四条核心指令,否则会静默失效——Nginx 不报错、不警告,但客户端仍要自行查询 OCSP,握手延迟多出 150–300ms。
确认五项硬性前提是否全部满足
缺任何一项,stapling 都不会工作:
- 证书含有效 OCSP URI:运行
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP",输出中必须有类似OCSP - URI: http://ocsp.int-x3.letsencrypt.org - Nginx 版本 ≥ 1.3.7(生产建议 ≥ 1.11.0),OpenSSL ≥ 1.0.1(推荐 1.1.1+ 或更新版)
- 系统时间误差 ≤ ±5 分钟:用
chronyc tracking或ntpdate -q pool.ntp.org检查 - 证书链完整:确保
ssl_certificate指向的是域名证书 + 所有中间证书合并的 PEM 文件(如 Let’s Encrypt 的fullchain.pem) - 服务器能直连 OCSP 地址:用
curl -v http://ocsp.int-x3.letsencrypt.org或openssl ocsp -url [URL] -text测试是否返回responseStatus: successful
HTTPS server 块内必须共存的四条核心指令
全部配置必须放在 server { listen 443 ssl; } 块内,不能写在 http 块顶层或 location 中:
-
ssl_stapling on;—— 显式启用装订功能 -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者及有效期,防止伪造或过期数据被缓存 -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;—— 指向仅含中间证书 + 根证书的 PEM 文件,顺序为中间证书在前、根证书在后;不能包含你的站点证书 -
resolver 1.1.1.1 8.8.8.8 223.5.5.5 valid=300s;—— 必须显式指定至少两个 DNS;valid=300s表示 DNS 缓存 5 分钟;Nginx 不读/etc/resolv.conf
验证是否真正生效的三种方法
不能只看配置重载成功,要确认客户端实际收到了 stapled 响应:
- 终端执行:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A 2 "OCSP response",成功时应看到OCSP response: successful (0x0)和CertStatus: good - 检查 Nginx 错误日志,搜索关键词:
ocsp、no resolver defined、verify failed、timeout - 用 SSL Labs 测试页,查看结果中 “OCSP stapling” 是否显示 Yes
推荐补充的稳定性配置
这些不是必需项,但能显著提升实际运行中的鲁棒性:
-
resolver_timeout 5s;—— 防止 DNS 查询卡住整个 TLS 握手 -
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;—— 启用会话复用,减少重复触发 OCSP 查询 - 若使用 Let’s Encrypt,
ssl_trusted_certificate可直接复用chain.pem(路径如/etc/letsencrypt/live/example.com/chain.pem),但务必确认该文件不含站点证书本身











