ocsp stapling 在 nginx 中需同时满足五项前提(nginx≥1.3.7、openssl≥1.0.1、证书含有效ocsp uri、系统时间偏差≤±5分钟、证书链完整且可直连ocsp地址)并配置四条核心指令(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver),缺一即静默失效,无法减少150–300ms握手延迟。

在 Nginx 的 server 块中配置 OCSP Stapling,不是加一行 ssl_stapling on 就能提速的开关,而是一套必须全部满足、协同工作的机制。缺任何一项,Nginx 会静默关闭 stapling——不报错、不警告,客户端仍需自行查询 OCSP,导致 TLS 握手多出 150–300ms 延迟。
确认五项基础前提是否全部满足
任一不达标,stapling 都不会生效:
- Nginx 版本 ≥ 1.3.7(生产环境建议 ≥ 1.11.0);OpenSSL ≥ 1.0.1(推荐 1.1.1+ 或更新版)
- 证书含有效 OCSP 地址:运行
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP",输出中应有类似OCSP - URI: http://ocsp.int-x3.letsencrypt.org - 服务器系统时间误差 ≤ ±5 分钟(可用
chronyc tracking或ntpdate -q pool.ntp.org检查) - 证书链完整:要么
ssl_certificate指向含域名证书 + 所有中间证书的 PEM 文件(如 Let’s Encrypt 的fullchain.pem),要么用ssl_trusted_certificate单独指定可信链 - 服务器能直连 OCSP 响应器地址(例如
ocsp.int-x3.letsencrypt.org),无防火墙或网络策略拦截
server 块内必须写全的四条核心指令
全部放在监听 443 的 HTTPS server 块中,不能写在 http 块顶层,也不能嵌入 location 块里:
-
ssl_stapling on;—— 显式启用装订功能(默认关闭) -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者及有效期,防止伪造或过期数据被使用 -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;—— 指向仅含中间证书 + 根证书的 PEM 文件(顺序:中间在前、根在后),不能包含你的域名证书 -
resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=300s;—— 必须显式配置 DNS 解析器(Nginx 不读/etc/resolv.conf);多个 DNS 提升容错性;valid=300s表示 DNS 缓存 5 分钟
强烈建议追加的稳定性配置
这些虽非强制,但能显著降低静默失效风险:
-
resolver_timeout 5s;—— 防止 DNS 查询卡住整个 TLS 握手流程 -
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;—— 启用会话复用,减少重复触发 OCSP 查询频率 - 若使用 Let’s Encrypt,
ssl_trusted_certificate通常可直接复用chain.pem或fullchain.pem(去掉站点证书后的内容)
验证是否真正生效
不能只看配置重载成功,要确认客户端实际收到了 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











