Nginx配置HTTPS需用含服务器证书和中间证书的fullchain.pem文件作为ssl_certificate值,顺序为服务器证书在前、中间证书在后,不可含根证书;否则浏览器因信任链不完整而提示“证书不受信任”。

证书链文件配置不当,是 HTTPS 访问出现“连接不安全”或浏览器提示“证书不受信任”的最常见原因之一。Nginx 本身不直接加载独立的中间证书文件,而是依赖 ssl_certificate 指令所指向的证书文件是否已包含完整证书链。
为什么需要证书链文件
浏览器验证服务器身份时,需从服务器证书逐级向上验证到受信任的根 CA。若只提供服务器证书(.crt),缺少中间证书,部分客户端(尤其是旧系统或移动端)无法构建完整信任链,导致告警。权威 CA(如 Let’s Encrypt、DigiCert)签发的证书几乎都依赖中间证书,不能省略。
正确准备证书链文件
将服务器证书与中间证书合并为一个 PEM 文件,顺序必须严格为:
- 第一段:你的域名证书(
example.com.crt或cert.pem) - 第二段及后续:所有中间证书(按颁发顺序,从近端到远端,即“中间 → 根下一级”)
- 注意:不要包含根证书(root CA),它已内置在操作系统/浏览器中
合并命令示例(Linux):cat example.com.crt intermediate.crt > fullchain.pem
验证是否完整:openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt fullchain.pem
若返回 OK,说明链有效。
Nginx 中如何指定证书链
Nginx 只认一个证书文件路径,所以必须使用合并后的 fullchain.pem 作为 ssl_certificate 值,而不是原始服务器证书:
-
ssl_certificate /etc/nginx/ssl/fullchain.pem;✅(含服务器证书 + 中间证书) -
ssl_certificate_key /etc/nginx/ssl/privkey.pem;(私钥保持单独) -
不要写成
ssl_certificate /etc/nginx/ssl/example.com.crt;❌(易导致链不完整)
如果证书来源是腾讯云、阿里云等平台,下载的“Nginx 版”压缩包里通常已提供 1_root_bundle.crt 或 full_chain.pem,直接使用即可;若只有 chain.crt,需手动合并。
补充:ssl_trusted_certificate 的用途
该指令仅用于 Nginx 作为 OCSP 装订(stapling)或证书吊销验证 的信任锚点,不是给浏览器看的证书链:
- 它应指向系统级 CA 证书包(如
/etc/ssl/certs/ca-certificates.crt) - 启用 OCSP stapling 时才需要,非必需项:
ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;<br> ssl_stapling on;<br> ssl_stapling_verify on;
普通 HTTPS 正常访问,只需配对好 ssl_certificate(含链)和 ssl_certificate_key 即可。


















