ocsp stapling 不是单行配置即可生效的开关,而是需同时满足nginx≥1.3.7、openssl≥1.0.1、证书含authorityinfoaccess扩展、系统时间偏差≤±5分钟、证书链完整,并在server块中配齐ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver及resolver_timeout的协同机制。

OCSP Stapling 不是加一行 ssl_stapling on 就能生效的开关,而是一套必须全部满足的协同机制。配置完整时,移动端 HTTPS 首次握手可减少 150–300ms 延迟;任一环节缺失,Nginx 会静默关闭 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单独指定可信链
核心配置项必须四者齐备
以下指令需放在 server 块(HTTPS 监听段)中,位置在 ssl_certificate 下方,不可嵌套于 location 内:
-
ssl_stapling on;—— 显式启用 stapling 功能(默认关闭) -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者及有效期,防止缓存伪造 -
ssl_trusted_certificate /path/to/ca-bundle.pem;—— 指向专用于验证 OCSP 响应的证书链,内容须按顺序:中间 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表示 DNS 缓存 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启动失败或响应校验失败 - 若 OCSP 地址为内网域名(如
ocsp.internal-ca.local),resolver 必须指向能解析它的内网 DNS(如 CoreDNS),公网 DNS 无效
验证是否真正生效
配置完成后重启 Nginx,并用以下方式验证:
- 终端测试:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -status -tlsextdebug 2>&1 | grep -i "OCSP response"
成功时应返回OCSP Response Status: successful (0x0) - 浏览器开发者工具 → Security 标签页 → 查看“Certificate Transparency”或“Revocation status”,部分新版 Chrome/Firefox 可直接显示 stapling 状态
- 在线检测:访问 SSL Labs Test,查看 “OCSP stapling” 项是否显示 “Yes”











