为 HTTPS 在 Nginx 中配置 OCSP Stapling 的详细步骤

作者:袖梨 2026-07-21
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 对运行环境和证书有明确硬性要求,缺一不可:

  • 证书必须含 Authority Information Access 扩展,即提供有效的 OCSP 响应器地址。用命令验证:
    openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"
    输出中需出现类似 OCSP - URI:http://ocsp.int-x3.letsencrypt.org
  • Nginx 版本 ≥ 1.3.7(生产环境建议 ≥ 1.11.0);OpenSSL ≥ 1.0.1(推荐 1.1.1+ 或更新版)
  • 服务器系统时间偏差 ≤ ±5 分钟(OCSP 响应含严格时间戳,超时即被拒绝)
  • 证书链完整:要么 ssl_certificate 指向包含站点证书 + 所有中间证书的文件(如 Let’s Encrypt 的 fullchain.pem),要么通过 ssl_trusted_certificate 单独指定可信链

在 server 块中写全必需配置项

所有指令必须放在监听 443 的 server { ... } 块内(不能放 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 查询超时设为 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) 即表示成功
  • 在线工具验证:使用 SSL Labs 的 SSL Test(ssllabs.com/ssltest),查看报告中 “OCSP Stapling” 项是否显示为 “Yes”
  • 检查 Nginx error log:正常启用时会有类似 stapling in the certificate chain, issuer: ... 的日志;若失败,常见提示是 no resolver defined to resolve OCSP responder hostname

相关文章

精彩推荐