Nginx 添加SSL支持HTTPS后 脚本启动失败 Enter PEM pass phrase

本文记录了在CentOS 7环境下配置Nginx SSL过程中遇到的问题及解决方案。主要介绍了如何解决因SSL密钥文件包含Passphrase而导致的启动失败问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:centos7
软件环境:nginx1.10.2

遇到问题

在nginx中添加SSL支持,使用的是免费的StartCom 的一年免费SSL签证。
将下载的server.crt和自己生成的server.key配置到nginx.conf中,但是发现使用脚本启动有问题。

nginx.conf

        listen      8080 ;
        listen      443 ssl;
        server_name  www.jeiao.com;

        charset utf-8;

        ssl_certificate     /usr/local/nginx/ssl/www.jeiao.com.crt;
        ssl_certificate_key  /usr/local/nginx/ssl/www.jeiao.com.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

检查nginx 服务状态

[root@nginx]# systemctl status nginx.service
● nginx.service - SYSV: Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server
   Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2017-01-19 04:46:06 UTC; 19s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 22025 ExecStop=/etc/rc.d/init.d/nginx stop (code=exited, status=0/SUCCESS)
  Process: 22054 ExecStart=/etc/rc.d/init.d/nginx start (code=exited, status=1/FAILURE)
 Main PID: 21789 (code=exited, status=0/SUCCESS)

Jan 19 04:46:06 systemd[1]: Starting SYSV: Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server...
Jan 19 04:46:06 nginx[22054]: Starting nginx: Enter PEM pass phrase:
Jan 19 04:46:06 nginx[22054]: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/usr/local/nginx/ssl/www.jeiao.com.key") failed (SSL: error:0906406D:PEM routines:PEM_def_callback:p...
Jan 19 04:46:06 nginx[22054]: [FAILED]
Jan 19 04:46:06 systemd[1]: nginx.service: control process exited, code=exited status=1
Jan 19 04:46:06 systemd[1]: Failed to start SYSV: Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server.
Jan 19 04:46:06 systemd[1]: Unit nginx.service entered failed state.
Jan 19 04:46:06 systemd[1]: nginx.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

使用命令行启动nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

Enter PEM pass phrase:#输入证书的密码

大致明白了是因为 ssl key中有Passphrase需要移出。

解决办法

cp www.jeiao.com.key www.jeiao.com.key.org
openssl rsa -in www.jeiao.com.key.org -out www.jeiao.com.key

替换ssl下的key,并重启nginx。

然后使用脚本启动nginx就没有问题了。

/etc/init.d/nginx start
#启动输出log
Starting nginx (via systemctl):                    [  OK  ]

参考链接:
http://www.akadia.com/services/ssh_test_certificate.html
http://webmasters.stackexchange.com/questions/1247/can-i-skip-the-pem-pass-phrase-question-when-i-restart-the-webserver

<think>好的,我现在需要解决用户遇到的Nginx重启时提示输入PEM密码的问题。根据提供的引用内容,问题出在私钥文件被加密,导致每次启动都需要输入密码。用户希望找到解决方法,避免每次手动输入。 首先,我需要回忆一下SSL证书和私钥的相关知识。私钥文件通常可以是加密的或未加密的。如果私钥在生成时设置了密码,那么每次使用该密钥时都需要输入密码,比如在Nginx重启时。这对于自动化部署或服务器自动重启来说很不方便。 根据引用[2]和[3],解决方法是使用OpenSSL命令将密码从私钥中移除。具体步骤是用openssl rsa命令处理原始私钥文件,生成一个不带密码的新私钥文件。例如,命令是`openssl rsa -in server.key -out server.key.unsecure`。这样生成的server.key.unsecure文件就不再需要密码了。 接下来,用户需要修改Nginx的配置文件,将ssl_certificate_key指向新的无密码私钥文件,比如server.key.unsecure。之后重启Nginx就不会再提示输入密码了。但需要注意,这样做会降低私钥的安全性,因为私钥不再受密码保护。因此,必须确保该文件的安全,例如设置严格的文件权限,避免未授权访问。 用户可能需要确认当前私钥文件是否确实加密了。可以通过查看文件内容,如果开头有类似-----BEGIN ENCRYPTED PRIVATE KEY-----的标记,说明是加密的。如果是-----BEGIN RSA PRIVATE KEY-----,则未加密。 另外,引用[4]提到了一个博客链接,可能提供了其他方法或注意事项,但目前的信息已经足够解决问题。需要提醒用户备份原始私钥文件,以防操作失误导致问题。 总结步骤应该是:备份原文件→移除密码→更新Nginx配置→调整文件权限→测试重启。同时强调安全措施的重要性,比如限制私钥文件的访问权限,仅允许必要用户读取。</think>### 如何处理Nginx重启时提示"Enter PEM pass phrase"的问题? 当Nginx配置SSL证书后重启提示输入PEM密码,通常是因为私钥文件(`.key`)被加密保护。以下是解决方法和注意事项: --- #### **步骤1:确认私钥加密状态** 检查私钥文件内容: ```bash cat server.key ``` 若文件头部显示`-----BEGIN ENCRYPTED PRIVATE KEY-----`,则说明该私钥已加密[^3]。 --- #### **步骤2:使用OpenSSL移除私钥密码** 通过以下命令生成无密码的私钥文件(需输入原密码): ```bash openssl rsa -in server.key -out server.key.unsecure ``` 生成的文件`server.key.unsecure`将不再需要密码验证[^2][^3]。 --- #### **步骤3:修改Nginx配置** 在Nginx配置文件中,将`ssl_certificate_key`指向新生成的私钥: ```nginx server { listen 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/server.key.unsecure; # 替换为无密码私钥路径 } ``` --- #### **步骤4:设置文件权限** 确保私钥文件权限严格(仅允许管理员读取): ```bash chmod 400 server.key.unsecure chown root:root server.key.unsecure ``` --- #### **步骤5:重启Nginx验证** ```bash nginx -t # 检查配置语法 systemctl restart nginx # 此时应不再提示输入密码 ``` --- ### **注意事项** 1. **安全性风险**:无密码私钥若被泄露,会直接威胁SSL证书安全。建议仅在安全环境(如防火墙保护、严格权限控制)下使用此方法。 2. **备份原文件**:操作前备份`server.key`,避免操作失误导致证书失效。 3. **自动化部署兼容性**:此方法适用于需要无人值守重启的场景(如Docker容器、CI/CD流程)[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingjie1212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值