开启ssl_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)。

开启 ssl_stapling 能让 Nginx 在 TLS 握手时直接把证书吊销状态“钉”进响应,省去客户端单独查 OCSP 的一次网络请求,通常可减少 150–300ms 延迟,对移动端和高延迟网络效果尤其明显。
确认基础条件是否满足
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"; - 服务器时间准确(OCSP 响应含有效期,偏差超 5 分钟常被拒绝);
- 证书链完整:
ssl_certificate应包含站点证书 + 中间证书,或用ssl_trusted_certificate单独指定可信 CA 链。
核心配置项写法与要点
这些指令需放在 server 块(HTTPS 端口监听下)或全局 http 块中,不能遗漏关键环节:
-
ssl_stapling on;—— 必须显式开启,默认为 off; -
ssl_stapling_verify on;—— 强烈建议开启,Nginx 会校验 OCSP 响应签名、有效期及颁发者,防止缓存伪造数据; -
ssl_trusted_certificate /path/to/ca-bundle.pem;—— 指向根证书 + 所有中间证书的 PEM 文件(不是ssl_certificate那个),常见于 Let’s Encrypt 的fullchain.pem; -
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 查询超时设为 5 秒较稳妥,避免因解析卡住拖慢整个握手。
DNS 配置容易被忽略的关键细节
resolver 不只是“填个 IP”,它的行为直接影响 stapling 是否稳定启用:
- 若未配置
resolver,Nginx 日志只会提示no resolver defined to resolve OCSP responder hostname,然后静默关闭 stapling,毫无预警; - 如果服务器仅支持 IPv6,需额外加
resolver ipv6=on;; - 避免只写一个 DNS(如仅
8.8.8.8),当该 DNS 暂时不可达或屏蔽 OCSP 域名时,stapling 就会失效; -
valid时间不宜过短(如 60s)——频繁重查增加开销;也不宜过长(如 86400s)——无法及时响应 OCSP 域名变更。
验证是否真正生效
配置重启后,别只看 Nginx 启动成功,要用实际连接验证:
- 执行命令:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A17 "OCSP response" - 若输出中出现
OCSP Response Status: successful (0x0)及后续 ASN.1 数据块,说明 stapling 已生效; - 若只看到
OCSP response: no response sent或完全无相关字段,说明某处配置失败,需按顺序检查证书扩展、resolver、路径权限、日志报错(error_log级别设为info更易排查)。


















