ssl_trusted_certificate必须包含签发域名证书的全部中间CA证书及根证书,顺序为中间证书在前、根证书在后,不可含域名证书,仅用于本地OCSP响应签名验证。

要让 Nginx 正确验证 OCSP 响应签名,ssl_trusted_certificate 必须提供一条完整、顺序正确的信任链——但它和服务器证书链用途不同,不能直接复用 ssl_certificate 文件。
这个文件到底要放什么?
它只用于本地验证 OCSP 响应器的签名,不参与 TLS 握手时发给客户端的证书链。必须包含:
- 签发你域名证书的中间 CA 证书(一个或多个)
- 该中间 CA 所属的根证书(Root CA)
注意:不能只放根证书,也不能漏掉任何一级中间 CA;也不能把你的域名证书(example.com.crt)加进去。
推荐顺序是:中间证书在前,根证书在后。例如:
cat intermediate1.crt intermediate2.crt root.crt > full-chain-trusted.pem
怎么确认内容是否正确?
用 OpenSSL 命令提前测试验证能力:
openssl ocsp -issuer intermediate1.crt -cert example.com.crt -url <ocsp_url> -text -CAfile full-chain-trusted.pem
如果返回 Response verify OK,说明这个 PEM 文件可用;若报错“unable to get certificate CRL”,大概率是缺中间证书或顺序错。
查 OCSP 地址的方法:
openssl x509 -in example.com.crt -noout -text | grep -A1 "OCSP"
配置中容易踩的坑
-
ssl_trusted_certificate路径必须绝对准确,且 Nginx 进程有读取权限 - 不能和
ssl_certificate指向同一个文件(后者通常不含根证书) - 即使用了 Let’s Encrypt 的 fullchain.pem,也需确认它是否含根证书——多数情况下不含,需手动补全
- 若证书由多级中间 CA 签发(比如 “R3 → ISRG Root X1”),两个都要放进文件
配合启用 OCSP Stapling 的必要配置
仅设 ssl_trusted_certificate 不够,还需同时开启:
-
ssl_stapling on;(启用 stapling) -
ssl_stapling_verify on;(启用响应签名验证) -
resolver 8.8.8.8 1.1.1.1 valid=300s;(指定 DNS 解析器并设缓存时间)
缺少任一,OCSP 验证都不会生效,甚至可能导致 TLS 握手失败。


















