ssl_trusted_certificate 是 Nginx 验证 OCSP 响应签名的信任链文件,须严格包含中间 CA 与根 CA 证书(顺序不可颠倒),不参与 TLS 握手;必须配合 ssl_stapling on、ssl_stapling_verify on 和 resolver 指令使用,且路径权限需设为 644。

ssl_trusted_certificate 不是用来配置“OCSP 根证书”的,而是为 Nginx 提供验证 OCSP 响应签名所必需的信任链——它必须包含签发该 OCSP 响应的中间 CA 证书和其上级根 CA 证书,且顺序、内容、用途都严格限定。
这个文件不参与 TLS 握手,也不提供给客户端;它的唯一作用是:当 Nginx 收到或加载一个 OCSP 响应(来自网络拉取或本地文件)时,用其中的证书去验证这个响应是否由可信 CA 签发、签名是否有效、颁发者是否匹配、有效期是否合法。
必须只含中间 CA + 根 CA,不能含你的域名证书
- ✅ 正确:
intermediate.pem+root.pem拼成一个 PEM 文件 - ❌ 错误:直接复用
fullchain.pem(Let’s Encrypt 的fullchain.pem缺少根证书) - ❌ 错误:混入
example.com.crt或私钥
生成示例(以 Let’s Encrypt R3 为例):
cat /etc/letsencrypt/live/example.com/chain.pem /usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt > /etc/nginx/ssl/ocsp-trust-chain.pem
注意:
chain.pem是中间证书,ISRG_Root_X1.crt是根证书;顺序不可颠倒。
文件路径与权限要明确独立
- 路径需在
server { }块中显式指定,不能和ssl_certificate共用同一文件 - 推荐路径:
/etc/nginx/ssl/ocsp-trust-chain.pem - 权限设为
644,属主为root,确保 Nginx worker 进程可读 - 不可用
600或400(除非属主是运行 Nginx 的用户,但通常不是)
必须配合其他三项才能生效
仅配置 ssl_trusted_certificate 没有意义,它必须和以下指令共存于同一个 server 块内:
-
ssl_stapling on;—— 启用装订机制 -
ssl_stapling_verify on;—— 开启对 OCSP 响应的强校验 -
resolver 1.1.1.1 8.8.8.8 valid=300s;—— 显式 DNS 解析器,用于访问 OCSP 地址
若使用本地静态 OCSP 响应(通过 ssl_stapling_file),resolver 仍需存在——它不用于网络请求,但属于校验逻辑的激活条件。
验证是否配置正确(不重启 Nginx)
用 OpenSSL 手动测试信任链是否能成功验签:
openssl ocsp -issuer /path/to/intermediate.pem \
-cert example.com.crt \
-url http://ocsp.int-x3.letsencrypt.org \
-CAfile /etc/nginx/ssl/ocsp-trust-chain.pem \
-text看到 Response verify OK 表示该文件满足要求;若报 unable to get issuer certificate 或 signature verification failed,说明中间证书缺失、顺序错误、或 PEM 格式损坏。


















