Nginx无法加载带密码的SSL私钥,权限修改后仍报错求助
Nginx无法加载带密码保护的SSL私钥问题
问题现象
SSL私钥路径为 /etc/ssl/private/PRIVATEKEY.key,执行nginx -t验证配置通过后,执行:
systemctl reload nginx
出现错误:
nginx: [emerg] cannot load certificate key "/etc/ssl/private/PRIVATEKEY.key": PEM_read_bio_PrivateKey() failed (SSL: error:1>
Jan 29 14:00:33 vmi1520937 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Subject: Unit process exited
Defined-By: systemd
已尝试设置权限:
sudo chmod 600 PRIVATEKEY.key sudo chown root:root PRIVATEKEY.key
问题依旧。后续确认私钥通过以下命令生成,带有密码保护:
openssl req -newkey rsa:2048 -keyout PRIVATEKEY.key -out MYCSR.csr
解决方法
方法1:移除私钥的密码保护(推荐用于自动启动场景)
若希望Nginx能自动启动,无需每次输入密码,可通过openssl移除私钥密码:
- 切换到私钥所在目录:
cd /etc/ssl/private/
- 执行命令移除密码(执行后需输入原私钥密码):
openssl rsa -in PRIVATEKEY.key -out PRIVATEKEY-nopass.key
- 替换原私钥(或修改Nginx配置文件指向新的无密码密钥):
mv PRIVATEKEY.key PRIVATEKEY.key.bak mv PRIVATEKEY-nopass.key PRIVATEKEY.key
- 重新设置正确权限:
chmod 600 PRIVATEKEY.key chown root:root PRIVATEKEY.key
- 验证配置并重载Nginx:
nginx -t systemctl reload nginx
方法2:让Nginx加载带密码的私钥(手动输入密码)
若必须保留私钥的密码保护,可使用nginx自带的重载命令,执行时会提示输入私钥密码:
nginx -s reload
注意:此方式每次重启或重载Nginx都需手动输入密码,服务器重启后Nginx无法自动启动。
内容的提问来源于stack exchange,提问作者Alvar
相关产品推荐
相关产品推荐

