Nginx启动失败报SSL_CTX_use_PrivateKey_file failed,大概率是私钥被密码加密所致;需用openssl rsa -check -in key.key验证,若提示输入pass phrase或含DEK-Info行,则必须解密为无密码PEM格式私钥并更新配置。

Nginx 启动失败,报错中出现 SSL_CTX_use_PrivateKey_file failed 或提示私钥读取异常,但文件路径、权限、格式都看似正常——大概率是私钥被加密(带密码)导致的。Nginx 默认不支持加载带密码的私钥,必须提供无密码的 PEM 格式私钥才能启动。
确认私钥是否被加密
执行以下命令检查:
openssl rsa -check -in /etc/nginx/ssl/yourdomain.key如果终端提示 Enter pass phrase for ...,说明该私钥受密码保护,Nginx 无法自动解密,直接拒绝加载。
也可用快捷方式验证:
-
head -n 1 /etc/nginx/ssl/yourdomain.key —— 若输出含
DEK-Info:,即表示加密 - file /etc/nginx/ssl/yourdomain.key —— 输出应为 ASCII text;若含 data 或 encrypted 字样,也属加密或损坏
解密私钥(生成无密码版本)
使用 OpenSSL 移除密码,生成新私钥文件(原密钥保留备份):
openssl rsa -in yourdomain.key -out yourdomain_decrypted.key执行时会要求输入原始密码,成功后输出新文件。注意:
- 新文件开头必须是
-----BEGIN RSA PRIVATE KEY-----或-----BEGIN PRIVATE KEY----- - 确保新私钥权限设为 600:
chmod 600 yourdomain_decrypted.key - 更新 Nginx 配置中的
ssl_certificate_key指向这个解密后的文件
避免未来再出现该问题
生成私钥时就跳过密码环节,更安全且适配 Nginx:
- 生成无密码私钥:
openssl genrsa -out server.key 2048 - 若已用
-des3或-aes256参数生成了加密私钥,务必在部署前解密 - 不要用
openssl pkcs8等工具二次转换后再混用,可能引入结构兼容性问题
验证与重启
完成解密和配置更新后,按顺序操作:
- 运行
nginx -t确认语法及路径有效 - 查看错误日志确认无
pass phrase或key file not found类报错:tail -n 10 /var/log/nginx/error.log - 执行
nginx -s reload或systemctl restart nginx


















