开启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,最后用openssl s_client验证OCSP Response Status: successful (0x0)。

直接让 Nginx 在 TLS 握手时把证书吊销状态“打包发给客户端”,就能跳过客户端自己查 OCSP 的那一次网络请求。实测可减少 150–300ms 延迟,对移动端和弱网用户效果特别明显。
确认证书与环境是否支持
OCSP Stapling 不是开关一开就生效,必须全部满足以下条件:
- Nginx 版本 ≥ 1.3.7(生产建议 ≥ 1.11.0,错误处理更稳)
- OpenSSL ≥ 1.0.1(推荐 1.1.1 或更新版)
- 证书含 Authority Information Access 扩展,提供 OCSP 响应器地址;可用命令验证:
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP" - 服务器时间准确,偏差不能超过 ±5 分钟(OCSP 响应含严格有效期)
- 证书链完整:ssl_certificate 应为站点证书 + 中间证书合并的 PEM 文件(如 Let’s Encrypt 的
fullchain.pem)
关键配置项必须齐全
仅写 ssl_stapling on 是无效的。以下四条需同时出现在 server 块中(HTTPS 监听下):
-
ssl_stapling on;—— 显式启用功能 -
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表示 DNS 缓存 5 分钟
建议补充:resolver_timeout 5s;,避免 DNS 查询卡住整个 TLS 握手。
验证是否真正生效
别只看配置有没有报错,要确认客户端实际收到了 stapled 响应:
- 用 OpenSSL 测试:
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、stapling、no resolver、verify failed、timeout - 第三方工具辅助:访问 SSL Labs,查看结果中 “OCSP stapling” 是否显示 Yes
内网或私有 CA 场景的特殊处理
若使用自建 CA 或内网环境,公网 OCSP 地址不可达,标准自动 stapling 会失败。此时应改用本地文件缓存方式:
- 确保私有 CA 已部署并可访问 OCSP 响应器(如
http://ocsp.internal-ca.local) - 用命令手动拉取响应并保存:
openssl ocsp -issuer ca.crt -cert server.crt -url http://ocsp.internal-ca.local -respout /var/lib/nginx/ocsp/server.ocsp - 配置指向该文件:
ssl_stapling_file /var/lib/nginx/ocsp/server.ocsp; - 配合 cron 定期更新(频率参考 OCSP 响应中的
nextUpdate时间)
注意:ssl_trusted_certificate 必须使用私有 CA 的完整信任链(根 + 中间证书),且顺序正确,不能混入公网证书。


















