正确配置ssl_certificate指令需确保其指向合并了域名证书与中间证书的完整PEM文件(不含私钥),路径权限严格管控(证书644、私钥600),且须与ssl_certificate_key、listen 443 ssl、server_name协同校验,避免信任链断裂或域名不匹配。

正确配置 ssl_certificate 指令,关键在于确保它指向一个**完整、有效、格式合规**的证书文件,尤其在企业级场景中,不能只放域名证书,必须包含中间证书(CA chain),否则客户端(如浏览器、iOS App、API调用方)可能因信任链断裂而报错“NET::ERR_CERT_AUTHORITY_INVALID”。
证书文件必须合并为单个PEM文件
nginx 的 ssl_certificate 指令只接受一个文件路径,该文件需按严格顺序包含:
- 你的域名证书(
yourdomain.com.crt或fullchain.pem) - 紧接着是全部中间证书(顺序不能颠倒,通常由CA提供)
- 根证书不需放入(操作系统/浏览器已预置)
✅ 正确合并命令(Linux):cat yourdomain.com.crt intermediate.crt > /etc/nginx/ssl/fullchain.pem
⚠️ 注意:不要包含私钥,私钥由 ssl_certificate_key 单独指定。
路径与权限必须严格可控
企业环境中,证书路径应统一、可审计,权限须最小化:
- 证书文件(
fullchain.pem):权限设为644(所有者读写,组/其他只读) - 私钥文件(
privkey.pem):权限必须为600,且属主为root或nginx运行用户 - 目录路径建议使用
/etc/nginx/ssl/,避免放在 web 可访问目录(如/var/www)
配置块中需同步校验关联项
ssl_certificate 不是孤立指令,必须与以下三项协同生效:
-
ssl_certificate_key:必须指向对应私钥,且与证书公钥匹配(可用openssl x509 -noout -modulus -in fullchain.pem | openssl md5和openssl rsa -noout -modulus -in privkey.pem | openssl md5对比验证) -
listen 443 ssl:端口监听必须显式启用 ssl 标志 -
server_name:必须与证书中 Subject Alternative Name(SAN)完全一致(例如通配符*.example.com不匹配example.com,需额外添加)
企业级常见错误排查点
即使语法无误,仍易因细节失效:
- 证书过期:用
openssl x509 -in fullchain.pem -text -noout | grep "Not After"查看有效期 - 域名不匹配:检查证书 SAN 列表是否覆盖当前
server_name(含 www/non-www、子域名) - 中间证书缺失或顺序错:用
openssl s_client -connect example.com:443 -showcerts观察返回的证书链是否完整 - SELinux 或 AppArmor 限制:RHEL/CentOS 环境下需确认 nginx 被允许读取证书路径(
ls -Z /etc/nginx/ssl/)


















