You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置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
  • 如果提示输入密码,说明私钥有密码保护,执行以下命令去除密码:
    openssl rsa -in /etc/nginx/certificates/xyz.pem -out /etc/nginx/certificates/xyz-unencrypted.pem
    
    然后修改Nginx配置,将ssl_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:12:50