ocsp stapling 不是单行开关,而是需同时满足五项基础条件(nginx≥1.3.7、openssl≥1.0.1、证书含ocsp uri、系统时间偏差≤±5分钟、证书链完整)并配置四条核心指令(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver)的协同机制,缺一即静默失效。

OCSP Stapling 不是加一行 ssl_stapling on 就能提速的开关,而是一套必须全部到位的协同机制。配置完整后,移动端 HTTPS 首次握手可减少 150–300ms 延迟;任一环节缺失,Nginx 会静默关闭 stapling,不报错、不警告,实际效果归零。
确认基础条件是否全部满足
以下五项缺一不可,否则 stapling 不工作:
- Nginx ≥ 1.3.7(生产环境建议 ≥ 1.11.0,错误处理更稳定)
- OpenSSL ≥ 1.0.1(推荐 1.1.1+ 或更新版,支持 SHA-2 签名验证)
- 证书含
authorityInfoAccess扩展:运行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单独指定可信链(不含私钥和站点证书)
HTTPS server 块内必须写全的四条核心指令
这些指令必须放在 server { listen 443 ssl; } 块中,不能写在 http 块顶层,也不能嵌套在 location 内:
-
ssl_stapling on;—— 显式启用,默认为off -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者及有效期,防伪造或过期数据 -
ssl_trusted_certificate /path/to/fullchain.pem;—— 指向仅含中间证书 + 根证书的 PEM 文件(顺序:中间证书在前、根证书在后) -
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 握手流程。
两个最容易导致静默失效的陷阱
这两个问题在日志中提示极弱,但却是 stapling 失效的最常见原因:
-
resolver 缺失或不可达:Nginx 日志仅显示
no resolver defined to resolve OCSP responder hostname,然后自动关闭 stapling,无任何握手错误 -
ssl_trusted_certificate文件出错:中间证书缺失、顺序颠倒、混入了站点证书或私钥,都会导致ssl_stapling_verify on启动失败或响应校验失败
若 OCSP 地址是内网域名(如 ocsp.internal-ca.local),resolver 必须指向能解析它的内网 DNS。
验证是否生效
配置完成后重载 Nginx,用以下命令验证:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -status -tlsextdebug &1 | grep -i "OCSP response"
成功时输出中应包含 OCSP Response Status: successful (0x0);若显示 no response sent 或空白,则说明某环节未就绪。











