Nginx 通过ssl_trusted_certificate正确补全中间证书

 更新时间:2026年04月20日 09:02:12   作者:舞夢輝影  
在 Nginx 配置 HTTPS 时,使用 ssl_trusted_certificate 指令可以指定受信任的 CA 证书链,用于验证客户端证书或 OCSP Stapling 等功能,正确补全中间证书链是确保 SSL/TLS 连接兼容性和安全性的关键,下面就来详细的介绍一下如何使用,感兴趣的可以了解一下

在 Nginx 配置 HTTPS 时,使用 ssl_trusted_certificate 指令可以指定受信任的 CA 证书链,用于验证客户端证书或 OCSP Stapling 等功能。正确补全中间证书链是确保 SSL/TLS 连接兼容性和安全性的关键。

核心概念

证书类型说明
服务器证书 (End-entity)你的域名证书,由 CA 签发
中间证书 (Intermediate)连接服务器证书和根证书的桥梁
根证书 (Root)自签名的顶级 CA 证书,预装在系统信任库

为什么 ssl_trusted_certificate 不解决“链不完整”警告

这个指令的作用对象是 Nginx 本身,不是浏览器:

  • ssl_certificate:Nginx 在 TLS 握手时发给客户端的证书列表。必须含域名证书 + 所有中间证书(不含根证书)。
  • ssl_trusted_certificate:仅供 Nginx 内部使用,例如验证 OCSP 响应签名或校验双向 TLS 中客户端证书。它不会被发给浏览器,对修复“NET::ERR_CERT_AUTHORITY_INVALID”无效。

正确做法:确保 ssl_certificate 指向 fullchain 文件

所有修复动作都围绕一个核心——让 ssl_certificate 的值指向一个拼接好的 PEM 文件,内容顺序严格为:

  • 你的域名证书(example.com.crt
  • 紧接着是中间证书(如 intermediate.crt;若有多级,按信任路径从近到远追加)
  • 不要包含根证书(Root CA)

正确配置方式

1. 合并证书链文件

将服务器证书和中间证书按顺序合并到一个文件(服务器证书在前,中间证书在后):

# 正确的顺序:服务器证书 → 中间证书1 → 中间证书2(如有)
cat your_domain.crt intermediate.crt > fullchain.crt

或使用证书商提供的 fullchain.pem 文件。

2. Nginx 配置

server {
    listen 443 ssl http2;
    server_name example.com;
    # 服务器证书 + 中间证书(合并后的完整链)
    ssl_certificate     /etc/nginx/ssl/fullchain.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;
    # 受信任的 CA 证书(用于验证客户端证书或 OCSP)
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
    # OCSP Stapling(需要 ssl_trusted_certificate 支持)
    ssl_stapling on;
    ssl_stapling_verify on;
    # 其他 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
}

关键指令详解

指令用途文件内容
ssl_certificate向客户端展示的服务器证书链服务器证书 + 中间证书(必须完整)
ssl_certificate_key服务器证书的私钥私钥文件(.key 或 .pem)
ssl_trusted_certificate验证客户端证书或 OCSP 响应的受信 CA中间证书 + 根证书(通常不含服务器证书)

验证证书链完整性

方法一:OpenSSL 命令行

# 检查证书链是否完整(应显示 0 errors, 0 warnings)
openssl verify -CAfile /etc/nginx/ssl/chain.pem /etc/nginx/ssl/fullchain.crt
# 检查 Nginx 实际提供的证书链
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -text -noout
# 查看完整证书链
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts

方法二:在线检测工具

常见问题排查

问题 1:证书链不完整("Certificate chain incomplete")

症状:Android 旧设备或 Java 客户端无法连接。

解决:确保 ssl_certificate 包含完整链:

# 下载证书商提供的中间证书,合并到 fullchain
cat your_domain.crt ca_intermediate.crt > fullchain.crt

问题 2:OCSP Stapling 失败

症状ssl_stapling on 但 OCSP 状态为 No response sent

解决ssl_trusted_certificate 必须包含签发你证书的 CA 的完整链:

# 从证书中提取并保存中间证书
openssl crl2pkcs7 -nocrl -certfile fullchain.crt | openssl pkcs7 -print_certs -out chain.pem

问题 3:顺序错误

错误顺序(中间证书在前)会导致握手失败:

# ❌ 错误:不要这样合并
cat intermediate.crt your_domain.crt > wrong.crt

最佳实践配置模板

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;
    # 证书配置
    ssl_certificate     /etc/nginx/ssl/fullchain.pem;  # 证书+中间证书
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;      # 私钥
    # 受信 CA 链(用于 OCSP 和客户端验证)
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    # 现代 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    # 会话缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
}

配置完成后,务必使用 nginx -t 测试配置,并重启 Nginx 使配置生效。

到此这篇关于Nginx 通过ssl_trusted_certificate正确补全中间证书的文章就介绍到这了,更多相关Nginx ssl_trusted_certificate补全中间证书内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows安装nginx1.10.1反向代理访问IIS网站

    Windows安装nginx1.10.1反向代理访问IIS网站

    这篇文章主要为大家详细介绍了Windows安装nginx1.10.1反向代理访问IIS网站的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 如何用Nginx解决前端跨域问题

    如何用Nginx解决前端跨域问题

    在开发静态页面时,类似Vue的应用,我们常会调用一些接口,这些接口极可能是跨域,这篇文章主要介绍了如何用Nginx解决前端跨域问题,非常具有实用价值,需要的朋友可以参考下
    2019-01-01
  • nginx ingress限速那些事浅析

    nginx ingress限速那些事浅析

    这篇文章主要为大家介绍了nginx ingress限速的一些知识的浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Nginx中指令server_name的详细使用指南

    Nginx中指令server_name的详细使用指南

    对于Web开发者来说,Nginx是一个强大且灵活的Web服务器和反向代理服务器,下面这篇文章主要介绍了Nginx中指令server_name详细使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • nginx基于IP的多虚拟主机实现

    nginx基于IP的多虚拟主机实现

    如果同一台服务器有多个IP,可以使用基于IP的虚机主机配置,将不同的服务绑定在不同的IP上,本文主要介绍了nginx基于IP的多虚拟主机实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Nginx limit 限制访问模块的方法

    Nginx limit 限制访问模块的方法

    本篇文章主要介绍了Nginx limit 限制访问模块的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 详解Nginx反向代理到Tomcat服务器

    详解Nginx反向代理到Tomcat服务器

    本篇文章主要介绍了详解Nginx反向代理到Tomcat服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Linux服务器下nginx的安全配置详解

    Linux服务器下nginx的安全配置详解

    本篇文章主要介绍了Linux服务器下nginx的安全配置详解,Nginx在很多高流量网站上得到了应用,有需要的朋友可了解一下。
    2016-10-10
  • 使用AWS的ELB服务时为Nginx启用代理协议的步骤讲解

    使用AWS的ELB服务时为Nginx启用代理协议的步骤讲解

    这篇文章主要介绍了使用AWS的ELB服务时为Nginx启用代理协议的步骤讲解,ELB服务是亚马逊服务器提供的常用的负载均衡方案,需要的朋友可以参考下
    2015-12-12
  • nginx实现反向代理出现502的问题解决

    nginx实现反向代理出现502的问题解决

    本文主要介绍了nginx实现反向代理出现502的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08

最新评论