nginx 配置 ocsp stapling 可降低 150–300ms 握手延迟并保护用户隐私,需满足四条件:nginx ≥1.3.7(推荐≥1.11.0)、openssl ≥1.0.1(推荐≥1.1.1+)、证书含有效 ocsp uri、系统时间误差 ≤±5 分钟;且必须配置 ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate 和 resolver 四项指令于 server 块内。

在 Nginx 中配置 OCSP Stapling 能把证书吊销状态直接“装订”进 TLS 握手过程,省去客户端向 CA 单独发起 OCSP 查询的步骤,通常可降低 150–300ms 握手延迟,同时避免用户访问行为暴露给第三方 CA。
确认基础运行条件是否全部满足
OCSP Stapling 是强依赖机制,缺一不可:
- Nginx 版本 ≥ 1.3.7;生产环境建议用 1.11.0 或更高稳定版(旧版本对 OCSP 错误响应处理不稳定,易静默失败)
- OpenSSL ≥ 1.0.1;推荐 1.1.1+ 或更新版(支持 SHA-2 签名验证,保障响应可信)
- 证书必须含 Authority Information Access 扩展,内嵌有效 OCSP URI;可用命令验证:
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"
输出中应出现类似OCSP - URI:http://ocsp.int-x3.letsencrypt.org - 服务器系统时间误差 ≤ ±5 分钟(OCSP 响应含严格时间戳,偏差超限即被拒绝)
- 证书链完整:确保
ssl_certificate指向的是域名证书 + 中间证书合并的 PEM 文件(如 Let’s Encrypt 的fullchain.pem),或已通过ssl_trusted_certificate单独提供可信链
四条核心配置必须同时写全且位置正确
所有指令必须出现在 server { listen 443 ssl; } 块内,不可放在 http 块顶层,更不可嵌入 location 块中(否则无效):
-
ssl_stapling on;—— 显式启用装订机制 -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者及有效期,防止缓存污染或伪造响应 -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;—— 指向仅含中间证书 + 根证书的 PEM 文件(顺序:中间在前、根在后;不能含域名证书,也不能复用ssl_certificate路径) -
resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=300s;—— 必须显式指定 DNS 解析器(Nginx 不读/etc/resolv.conf);valid=300s避免 DNS 缓存过期导致 stapling 中断
建议追加: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启动失败或校验绕过 - 若服务器仅支持 IPv6,需额外添加
resolver ipv6=on;
验证 OCSP Stapling 是否生效
配置完成后重启 Nginx,并用以下方式确认:
- 使用 OpenSSL 测试连接并检查 OCSP 响应字段:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A17 "OCSP response"
若看到OCSP Response Data及有效状态(如cert status: good),说明已生效 - 查看 Nginx error log,正常启动时应有类似
stapling in the certificate chain, issuer: ...的日志行











