浏览器提示“不安全”主因是中间证书缺失,须将域名证书与中间证书严格按序拼接为fullchain.pem并配置ssl_certificate,私钥单独设ssl_certificate_key,不可依赖ssl_trusted_certificate。

浏览器提示“不安全”,多数情况不是证书没配,而是中间证书没发给客户端——Nginx 没把中间证书包含在 TLS 握手响应里,导致客户端无法构建信任链。修复核心只有一条:确保 ssl_certificate 文件内容正确拼接,而非依赖 ssl_trusted_certificate。
为什么改 ssl_trusted_certificate 没用
ssl_trusted_certificate 是给 Nginx 自己用的,比如验证客户端证书(mTLS)或 OCSP 响应签名。它完全不参与向浏览器发送的服务端证书链。无论你把它设成 fullchain.pem 还是空文件,只要 ssl_certificate 里没含中间证书,浏览器就收不到完整链,警告照出。
真正要改的是 ssl_certificate 文件内容
这个文件必须是一个 PEM 格式拼接体,顺序严格为:
- 你的域名证书(如
example.com.crt) - 紧接着所有中间证书(如
intermediate.crt,多级则按信任路径从近到远追加) - 不能包含根证书(浏览器自带,加了反而可能触发兼容问题)
- 两段之间不能有空行,每段以
-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾
推荐生成方式(Linux 终端):
cat example.com.crt intermediate.crt > /etc/nginx/ssl/fullchain.pem
然后在 Nginx 配置中明确使用:
ssl_certificate /etc/nginx/ssl/fullchain.pem;<br>ssl_certificate_key /etc/nginx/ssl/example.com.key;
如何确认是否真的修好了
别信宝塔界面的小图标或浏览器缓存,用命令实测:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts 2>/dev/null | grep "subject="
输出中应至少看到两行:
• 一行是你的域名(CN=your-domain.com)
• 一行是中间 CA 名称(如 CN=Let's Encrypt R3 或 CN=DigiCert SHA2 Secure Server CA)
宝塔用户特别注意
【自动补全证书链】按钮对 Let’s Encrypt 通常有效,但对 ZeroSSL、BuyPass、自签名或私有 CA 签发的证书大概率失效,甚至可能清空证书内容。务必手动检查:
• 进入【网站】→【SSL】→【证书信息】,看是否显示“证书链完整”且无红色感叹号
• 直接用 cat /etc/nginx/ssl/fullchain.pem 查看实际内容,确认是否含两段以上证书











