Nginx不支持私钥密码,必须移除密码保护才能静默启动;需用openssl rsa解密私钥,设600权限,并用绝对路径引用,否则会因SSL_CTX_use_PrivateKey_file()失败而退出。

私钥带密码是 Nginx 启动时卡住的常见原因——它无法交互式输入密码,直接报错退出。解决办法只有一个核心:**移除私钥的密码保护**,让 Nginx 能静默读取。
为什么必须去掉私钥密码
Nginx 启动或重载时不会弹出密码输入框,遇到加密私钥(如用 -des3 或 -aes256 生成的)会直接失败,日志里通常显示:
SSL_CTX_use_PrivateKey_file() failed 或 cannot load certificate key。这不是配置错误,而是机制限制。
如何安全地去除私钥密码
执行这条命令即可解密私钥文件:
openssl rsa -in /etc/nginx/ssl/example.com.key -out /etc/nginx/ssl/example.com.key
注意:
• 运行时会提示你输入原私钥密码,输对后就覆盖生成无密码版本;
• 原始加密私钥建议先备份,比如 cp example.com.key example.com.key.encrypted;
• 解密后务必立即收紧权限:sudo chmod 600 /etc/nginx/ssl/example.com.key。
预防下次再出现
生成新私钥时,跳过密码环节更省事:
- 用
openssl genrsa -out server.key 2048(不加-des3) - 或用
openssl req -x509 -nodes -newkey rsa:2048 -keyout server.key -out server.crt -days 3650(-nodes即 no DES)
这样一步到位,既满足 Nginx 要求,又避免后续手动解密。
确认是否已生效
改完后做两件事:
- 运行
sudo nginx -t检查语法——不再报 SSL 相关 directive 错误,说明私钥可读; - 查看私钥是否真没密码:
openssl rsa -noout -text -in /etc/nginx/ssl/example.com.key,若没提示输入密码就输出内容,即成功。
只要私钥无密码、权限为 600、路径写绝对路径,Nginx 就能顺利加载 HTTPS 配置。











