Nginx部署SSL证书时,如何合并证书链?
在Nginx中部署SSL证书时,合并证书链是确保浏览器或客户端能完整验证信任链的关键步骤。如果缺少中间证书,可能会导致部分设备(如移动端或旧版浏览器)提示“不安全”。
以下是合并证书链的具体步骤和注意事项:
明确合并顺序
证书链的拼接必须遵循严格的顺序,不能颠倒:
你的域名证书(主证书 / 终端证书)
中间证书(可能包含多个,需按CA提供的顺序排列)注:根证书通常不需要放入,因为操作系统和浏览器已经内置了根证书。
使用命令行合并(推荐)
在Linux服务器上,使用 cat 命令是最安全、最快捷的方式。假设你的域名证书为 yourdomain.com.crt,中间证书为 intermediate.crt,可以执行以下命令:
cat yourdomain.com.crt intermediate.crt > /etc/nginx/ssl/fullchain.pem
如果你从CA机构下载了已经打包好的中间证书文件(如 ca_bundle.crt),也可以直接合并:
cat yourdomain.com.crt ca_bundle.crt > fullchain.pem
手动文本合并
如果你没有命令行环境,也可以使用文本编辑器手动合并。将域名证书和中间证书的内容复制粘贴到同一个文件中,确保顺序正确。
关键避坑注意事项
绝对不要包含私钥:合并后的证书文件中只能包含证书内容,私钥必须通过 ssl_certificate_key 指令单独指定。
严禁使用Windows记事本:手动编辑时千万不要使用Windows自带的记事本,它可能会在行尾添加不可见的字符(如BOM头或CRLF换行符),导致Nginx无法识别。建议使用 vim、nano 或 VS Code 等专业编辑器。
确保PEM格式正确:合并后的文件内容应遵循PEM格式,即每个证书都以 -----BEGIN CERTIFICATE----- 开头,以 -----END CERTIFICATE----- 结尾。
验证证书链完整性
合并完成后,可以使用 OpenSSL 工具验证证书链是否完整。运行以下命令:
openssl crl2pkcs7 -nocrl -certfile /etc/nginx/ssl/fullchain.pem | openssl pkcs7 -print_certs -noout
如果输出结果中至少包含两个证书(你的域名证书 + 中间证书),说明合并成功。
最后,在Nginx配置文件中,将 ssl_certificate 指令指向这个合并后的 fullchain.pem 文件,并重启Nginx即可生效。