启用ocsp stapling可降低150–300ms tls握手延迟并增强隐私性;需满足nginx≥1.3.7、openssl≥1.0.1、证书含authorityinfoaccess扩展、系统时间准确、证书链完整,并配置ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver及resolver_timeout。

在 Nginx 中启用 OCSP Stapling 能直接把证书吊销状态“钉”进 TLS 握手过程,省去客户端单独向 CA 发起 OCSP 查询的网络请求,通常可降低 150–300ms 握手延迟,同时避免暴露用户访问行为给第三方 CA,兼顾效率与隐私。
确认基础前提是否全部满足
OCSP Stapling 不是加几行配置就能跑通的功能,缺一不可:
- Nginx 版本 ≥ 1.3.7(生产环境强烈推荐 ≥ 1.11.0,错误处理更稳定);
- OpenSSL ≥ 1.0.1(建议使用 1.1.1 或更新版本);
- 证书必须包含 authorityInfoAccess 扩展(即内嵌 OCSP 响应器地址),可用命令检查:
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"; - 服务器系统时间误差不能超过 ±5 分钟(OCSP 响应含严格有效期,偏差过大会被拒绝);
- SSL 证书链完整:要么
ssl_certificate指向含域名证书 + 中间证书的 PEM 文件(如 Let’s Encrypt 的fullchain.pem),要么用ssl_trusted_certificate单独指定可信链。
核心配置项必须四者齐备
仅写 ssl_stapling on 是常见误区。以下四项需同时存在、路径准确、位置正确(一般放在 server 块的 HTTPS 配置中):
-
ssl_stapling on;—— 显式启用 stapling 功能(默认关闭); -
ssl_stapling_verify on;—— 强制 Nginx 校验 OCSP 响应的签名、颁发者及有效期,防止缓存伪造或中间人篡改; -
ssl_trusted_certificate /path/to/ca-bundle.pem;—— 指向专门用于验证 OCSP 响应的证书链(不是ssl_certificate所用文件),内容须按顺序包含:中间 CA 证书在前、根 CA 证书在后; -
resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=300s;—— 必须显式配置 DNS 解析器(Nginx 不读/etc/resolv.conf),多个 DNS 提升容错性,valid=300s表示缓存 5 分钟,避免频繁解析失败。
建议追加:resolver_timeout 5s;,防止 DNS 查询卡住整个 TLS 握手流程。
规避 DNS 和证书链常见陷阱
这两个环节最容易导致 stapling 静默失效,且日志提示极弱:
- 若未配置
resolver,Nginx 日志仅显示no resolver defined to resolve OCSP responder hostname,然后自动关闭 stapling,无任何握手报错; -
ssl_trusted_certificate文件若缺失中间证书、顺序颠倒、或混用ssl_certificate文件,会导致ssl_stapling_verify on启动失败或校验跳过; - 某些 CA 的 OCSP 域名(如
ocsp.int-x3.letsencrypt.org)可能被公共 DNS 屏蔽或限速,建议优先部署本地可信 DNS(如127.0.0.1搭配dnsmasq或unbound),并开启resolver ipv6=on(若环境支持 IPv6); - 不要只填一个 DNS 地址(例如仅
8.8.8.8),单点故障会直接中断 OCSP 获取。
验证是否真正生效
配置完成后重启 Nginx,用以下命令实测:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A17 "OCSP response"
若返回中出现 OCSP Response Status: successful (0x0),且有 Response verify OK,说明 stapling 已正常工作。也可用 SSL Labs 测试工具 全面分析,结果页会明确标注 “OCSP stapling: Yes”。











