OCSP Stapling 在 Nginx 中需同时满足五项硬性条件(证书含 OCSP URI、Nginx≥1.3.7、OpenSSL≥1.0.1、系统时间偏差≤±5分钟、证书链完整)并配置四条核心指令(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver),缺一不可,否则静默失效。
在 Nginx 中启用 OCSP Stapling 不是加一行 ssl_stapling on 就能生效的开关,而是一套必须全部满足、协同工作的机制。任一环节缺失,Nginx 会静默关闭 stapling——不报错、不警告,客户端仍需自行发起 OCSP 查询,导致 TLS 握手多出 150–300ms 延迟。
OCSP Stapling 对运行环境和证书有明确硬性要求,缺一不可:
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"OCSP - URI:http://ocsp.int-x3.letsencrypt.org
ssl_certificate 指向包含站点证书 + 所有中间证书的文件(如 Let’s Encrypt 的 fullchain.pem),要么通过 ssl_trusted_certificate 单独指定可信链所有指令必须放在监听 443 的 server { ... } 块内(不能放 http 块顶层,也不能嵌入 location),且全部同时存在:
ssl_stapling on; —— 显式启用,默认为 offssl_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 查询超时设为 5 秒,避免因解析卡住拖慢整个 TLS 握手这两个配置出错,会导致 stapling 静默失效,且日志提示极隐蔽:
ssl_trusted_certificate 内容必须纯净:只含中间证书和根证书,按顺序拼接(中间证书在前、根证书在后),不能混入站点证书,也不能复用 ssl_certificate 所指文件resolver 必须能连通 OCSP 域名:比如 ocsp.int-x3.letsencrypt.org。若使用私有 CA 或内网环境,resolver 应指向可解析其 OCSP 地址的内网 DNS(如 CoreDNS),而非公网 DNS配置完成后重启 Nginx,用以下方式确认:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -status -tlsextdebug 2>&1 | grep -i "OCSP response"OCSP Response Status: successful (0x0) 即表示成功stapling in the certificate chain, issuer: ... 的日志;若失败,常见提示是 no resolver defined to resolve OCSP responder hostname