配置Laravel Nginx子域名服务器时缺少SSL .key文件报错
解决Nginx加载SSL私钥失败的问题
针对你遇到的PEM_read_bio_PrivateKey() failed错误,按以下步骤排查解决:
1. 验证xyz.pem是否为有效私钥
执行以下命令检查文件是否为合法的RSA私钥:
openssl rsa -in /etc/nginx/certificates/xyz.pem -check
- 如果命令报错,说明这个文件不是私钥,可能是证书文件或格式错误,需要联系证书颁发机构重新获取对应的私钥文件。
- 如果命令输出
RSA key ok,则进入下一步排查。
2. 检查私钥是否带有密码保护
Nginx无法加载带密码的私钥(启动时无法交互式输入密码),执行以下命令验证:
openssl rsa -in /etc/nginx/certificates/xyz.pem
- 如果提示输入密码,说明私钥有密码保护,执行以下命令去除密码:
然后修改Nginx配置,将openssl rsa -in /etc/nginx/certificates/xyz.pem -out /etc/nginx/certificates/xyz-unencrypted.pemssl_certificate_key指向这个无密码的文件:ssl_certificate_key /etc/nginx/certificates/xyz-unencrypted.pem;
3. 修复文件权限问题
Nginx运行用户需要拥有私钥文件的读取权限,确保文件权限为600(仅所有者可读可写),且所属用户为Nginx运行用户(通常是nginx或www-data):
chmod 600 /etc/nginx/certificates/xyz.pem chown nginx:nginx /etc/nginx/certificates/xyz.pem
(如果你的Nginx运行用户是www-data,则替换为chown www-data:www-data /etc/nginx/certificates/xyz.pem)
4. 配置完整的证书链(可选但推荐)
将主证书和中间证书合并为完整链,避免浏览器出现证书不信任问题:
cat /etc/nginx/certificates/xyz.crt /etc/nginx/certificates/gd_bundle-g2-g1.crt > /etc/nginx/certificates/fullchain.crt
然后修改Nginx配置:
ssl_certificate /etc/nginx/certificates/fullchain.crt;
完成上述步骤后,测试Nginx配置合法性:
nginx -t
如果显示test is successful,再重启Nginx即可:
systemctl restart nginx
内容的提问来源于stack exchange,提问作者Tehcheatah
相关产品推荐
相关产品推荐

