开启 ssl_stapling 可减少 150–300ms TLS 握手延迟,但需满足 Nginx≥1.3.7、OpenSSL≥1.0.1、证书含 authorityInfoAccess 扩展、系统时间误差≤±5 分钟、证书链完整;且必须同时配置 ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate 和 resolver 四项。

开启 ssl_stapling 能让 Nginx 在 TLS 握手时,把证书吊销状态(OCSP 响应)直接“装订”进 ServerHello 消息,客户端无需再单独向 CA 发起一次网络请求查状态。实测可减少 150–300ms 握手延迟,对移动网络、高延迟链路效果尤其明显。
确认基础条件是否全部满足
缺一不可,否则配置写得再全也无效:
- Nginx 版本 ≥ 1.3.7;生产环境建议 ≥ 1.11.0,旧版本错误处理不稳定,容易静默失败
- OpenSSL ≥ 1.0.1;推荐使用 1.1.1 或更新版本,支持更安全的 OCSP 签名算法
- 证书必须含
authorityInfoAccess扩展(即提供 OCSP 响应器地址),可用命令验证:openssl x509 -in your.crt -text -noout | grep -A1 "OCSP" - 服务器系统时间误差不能超过 ±5 分钟,否则 OCSP 响应中的有效期校验会失败
- 证书链必须完整:要么
ssl_certificate是域名证书 + 中间证书合并的 PEM 文件(如 Let’s Encrypt 的fullchain.pem),要么用ssl_trusted_certificate单独指定可信链
核心配置项必须同时启用
仅写 ssl_stapling on 是常见误区。以下四条需全部出现在 server 块(HTTPS 监听下)或全局 http 块中:
-
ssl_stapling on;—— 显式启用,Nginx 主动获取并缓存 OCSP 响应 -
ssl_stapling_verify on;—— 强制校验 OCSP 响应的签名、颁发者和时间有效性,防止伪造或过期数据被缓存 -
ssl_trusted_certificate /path/to/ca-bundle.pem;—— 指向根证书 + 所有中间证书的 PEM 文件(不是ssl_certificate),用于验证 OCSP 响应签名;顺序应为中间证书在前、根证书在后 -
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 握手。
验证是否真正生效
不能只看配置是否加载成功,要确认客户端实际收到了 stapled 响应:
- 用 OpenSSL 测试:
openssl s_client -connect example.com:443 -servername example.com -status -tlsextdebug - 若输出中出现
OCSP Response Status: successful (0x0),且下方有Response Verify Failure以外的内容,说明 stapling 已工作 - 也可用在线工具如 SSL Labs Test,查看报告中 “OCSP stapling” 是否显示为 “Yes”
私有 CA 或内网环境的特别处理
公网 OCSP 地址不可达时,Nginx 自动 stapling 会失败,但仍有办法:
- 确保私有 CA 已部署 OCSP 响应器,并能被 Nginx 服务器直连(如
http://ocsp.internal-ca.local) -
ssl_trusted_certificate必须使用私有根 + 中间证书拼接的专用文件,不混入任何公网 CA 证书 - 若自动获取仍不可靠,可改用离线方式:定期用
openssl ocsp手动获取响应,保存为本地文件,再通过ssl_stapling_file /path/to/staple.der;指定——该方式绕过 DNS 和网络依赖,适合严格隔离环境



















