nginx 中配置 ocsp stapling 的信任根证书路径需用 ssl_trusted_certificate 指定仅含中间 ca 与根 ca 的 pem 文件(中间在前、根在后),不可含域名证书,且须与 ssl_stapling on、ssl_stapling_verify on、resolver 共同启用。

在 Nginx 中配置 OCSP Stapling 的信任根证书路径,关键不是“信任根证书”本身,而是通过 ssl_trusted_certificate 指令指定一个**专用于验证 OCSP 响应签名的 PEM 文件**——它必须包含且仅包含:签发 OCSP 响应器的中间 CA 证书 + 其上级根 CA 证书,顺序为中间证书在前、根证书在后。
ssl_trusted_certificate 文件内容要求
这个文件不是操作系统信任库,也不读取 ssl_certificate 所含证书。Nginx 用它来验签 OCSP 响应(比如来自 ocsp.int-x3.letsencrypt.org 的响应),因此内容必须精准:
- 不能包含你的域名证书(如
example.com.crt),否则校验直接失败 - 不能只放根证书,缺少中间证书会报
issuer certificate not found - 必须是 PEM 格式,两段证书按顺序拼接:第一段是中间 CA(如 Let’s Encrypt R3),第二段是根 CA(如 ISRG Root X1)
- 推荐路径示例:
/etc/nginx/ssl/trusted-ca.pem
如何生成这个文件
以 Let’s Encrypt 为例(使用 certbot 获取的证书):
- 通常可直接复用
chain.pem(不含域名证书,只含中间+根),或从fullchain.pem中手动剥离域名证书 - 安全做法是显式拼接:
cat /etc/letsencrypt/live/example.com/chain.pem > /etc/nginx/ssl/trusted-ca.pem - 若用自建 CA 或企业证书,需确认谁签发了你的 OCSP 响应器,再获取对应中间和根证书,按顺序 cat 合并
必须共存的配套配置
ssl_trusted_certificate 单独存在无效,必须与以下三项同在同一个 server { listen 443 ssl; } 块中:
-
ssl_stapling on;—— 启用装订功能 -
ssl_stapling_verify on;—— 开启强校验(否则不验签名) -
resolver 1.1.1.1 8.8.8.8 valid=300s;—— 显式 DNS,Nginx 不读/etc/resolv.conf
快速验证是否生效
不用重启 Nginx,用 openssl 命令本地测试:
openssl ocsp -issuer intermediate.pem -cert example.com.crt -url http://ocsp.int-x3.letsencrypt.org -CAfile /etc/nginx/ssl/trusted-ca.pem -text看到 Response verify OK 表示路径和内容正确;若报 unable to get issuer certificate 或 signature verification failed,大概率是顺序错、缺中间证书,或 PEM 格式损坏。











