Nginx自动化部署HTTPS证书链的关键是使用Certbot生成并正确引用fullchain.pem(含域名证书+中间证书),避免仅用cert.pem导致链不完整;需确保私钥权限600、配置语法正确、防火墙开放443端口且server_name匹配证书域名。

Nginx 中自动化部署 HTTPS 证书链,核心在于让证书文件完整、路径正确、配置可靠,并由工具自动维护更新。关键不是“手动拼证书链”,而是用成熟工具(如 Certbot)一步到位生成并验证完整的信任链。
证书链不完整是常见报错原因
浏览器提示“您的连接不是私密连接”或 Nginx 启动时报 SSL_CTX_use_certificate_chain_file failed,往往是因为只提供了域名证书(fullchain.pem 缺失中间 CA 证书),或 ssl_certificate 指向了错误的文件。
Certbot 自动处理证书链
Let’s Encrypt 的 Certbot 默认生成的是包含完整链的 fullchain.pem(即:域名证书 + 中间证书),而非单独的 cert.pem。只要在 Nginx 配置中正确引用它,就无需手动合并:
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
✅
fullchain.pem= 域名证书 + 所有必要的中间证书(不含根证书)
❌ 不要用cert.pem—— 它只含域名证书,缺少中间链,会导致链不完整
若需手动补全或调试证书链
某些场景(如使用商业证书、自建 CA 或云厂商证书)可能只提供 .crt 和 .key,此时需确认是否附带中间证书。若缺失,可:
- 下载对应 CA 的中间证书(例如 Sectigo、DigiCert 官网提供)
- 将中间证书追加到域名证书后,生成
bundle.crt:cat yourdomain.com.crt intermediate.crt > bundle.crt
- 在 Nginx 中使用该合并文件:
ssl_certificate /path/to/bundle.crt; ssl_certificate_key /path/to/yourdomain.com.key;
启用 ssl_trusted_certificate(高级可选)
该指令用于 OCSP 装订或客户端证书验证等场景,一般 HTTPS 网站不需要配置。仅当需要显式指定信任的根/中间证书集(比如做双向认证)时才用,普通单向 HTTPS 可忽略。
确保自动续期时链仍完整
Certbot 的续期命令 sudo certbot renew 默认保持 fullchain.pem 更新。建议验证续期逻辑是否生效:
# 测试续期(不实际更新,仅模拟) sudo certbot renew --dry-run # 查看证书链是否完整(输出应显示 chain length ≥ 2) openssl crl2pkcs7 -nocrl -certfile /etc/letsencrypt/live/yourdomain.com/fullchain.pem | openssl pkcs7 -print_certs -noout
最后检查三项硬性要求
- 私钥权限为
600(sudo chmod 600 /etc/letsencrypt/live/.../privkey.pem) - Nginx 配置中
listen 443 ssl http2;已启用,且无语法错误(sudo nginx -t) - 防火墙开放 443 端口,且
server_name与证书域名完全一致(含 www / 非 www)
不复杂但容易忽略


















