必须开启 ssl_stapling_verify on,因为它强制 Nginx 验证 OCSP 响应的签名、有效期及签发者可信链,防止伪造或篡改的响应被客户端误信,从而防御 OCSP 响应劫持攻击。

开启 ssl_stapling_verify on 是 Nginx 防御 OCSP 响应劫持、确保客户端证书状态验证真实性的关键配置。它强制 Nginx 在启用 OCSP Stapling 时,不仅缓存并发送 OCSP 响应,还主动校验该响应的签名有效性、有效期及签发者可信链——若验证失败,Nginx 将拒绝使用该 OCSP 响应,回退到传统在线查询(或直接拒绝连接,取决于其他配置),从而阻断攻击者伪造或篡改的 OCSP 数据被客户端误信。
为什么必须开启 ssl_stapling_verify?
OCSP Stapling 允许服务器在 TLS 握手时主动提供证书状态证明(即 OCSP 响应),避免客户端直连第三方 OCSP 响应器。但若不验证该响应本身是否合法,攻击者可能:
- 通过中间人劫持向 Nginx 返回伪造的“证书有效”OCSP 响应(例如篡改签名或有效期)
- 利用过期/自签名的 OCSP 签发证书生成看似有效的响应
- 在 Nginx 缓存机制未及时刷新时,长期提供已被吊销证书的“假有效”证明
开启 ssl_stapling_verify on 后,Nginx 会使用证书中指定的 OCSP 响应器证书(或其上级 CA 证书)验证 OCSP 响应签名,并检查响应时间戳、nonce(如存在)、证书序列号匹配性等,从根本上提升 OCSP 数据可信度。
正确启用的必要前提
仅设置 ssl_stapling_verify on 不足以生效,需同时满足以下条件:
-
已启用 OCSP Stapling:配置
ssl_stapling on -
提供完整可信证书链:在
ssl_certificate中包含服务器证书 + 中间证书(推荐合并为单个 PEM 文件),否则 Nginx 无法定位 OCSP 响应器的签发者进行验证 -
信任根证书可用:Nginx 必须能访问系统或指定的 CA 根证书包(通过
ssl_trusted_certificate显式指定更可靠) -
OCSP 响应器地址可达且响应规范:证书中
Authority Information Access扩展需含有效OCSP URI,且该服务返回 RFC 6960 兼容的 DER 编码响应
典型配置示例
以下为安全启用 OCSP Stapling 及验证的最小可行配置片段:
ssl_certificate /path/to/fullchain.pem; # 包含域名证书 + 中间证书 ssl_certificate_key /path/to/privkey.pem; ssl_trusted_certificate /path/to/root-ca-bundle.pem; # 显式指定信任锚点 <p>ssl_stapling on; ssl_stapling_verify on; ssl_stapling_responder <a href="https://www.php.cn/link/54b827599268bd42f5c04f317a0e0cf5">https://www.php.cn/link/54b827599268bd42f5c04f317a0e0cf5</a>; # 可选:显式指定 OCSP 地址(Let's Encrypt 示例)</p><h1>提升验证健壮性(可选)</h1><p>resolver 8.8.8.8 1.1.1.1 valid=300s; resolver_timeout 5s;</p>
注意:ssl_trusted_certificate 应指向包含根 CA 和中间 CA 的完整信任链文件(不含服务器证书),Nginx 用它构建验证路径;若省略,Nginx 会尝试从 ssl_certificate 中提取中间证书,但不可靠。
验证是否生效
部署后可通过以下方式确认验证逻辑已激活:
- 查看 Nginx 错误日志:若 OCSP 响应验证失败(如签名错误、证书过期),会出现类似
SSL_do_handshake() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error)的日志 - 使用
openssl s_client -connect example.com:443 -status连接,观察输出中OCSP Response Data是否存在,以及Verify Return Code是否为 0(表示 OCSP 响应本身通过验证) - 临时将
ssl_trusted_certificate指向空文件或无效路径,观察是否触发大量 OCSP 验证失败日志——这是验证机制正在工作的间接证据











