我正在尝试在Nginx上设置SSL。它不起作用,我在错误日志中收到以下错误,这是从编译nginx的OpenSSL库中传递出来的。我不知道那个库是什么,但它是nginx的0.8.54版本,我在Ubuntu Linux上使用apt-get安装它。
2012/02/21 07:06:33 [emerg] 4071#0:
SSL_CTX_use_PrivateKey_file("/exequias/certs/exequias.com.key") failed (SSL:
error:0906406D:PEM routines:PEM_def_callback:problems getting password error:
0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:
SSL_CTX_use_PrivateKey_file:PEM lib)
我确保私钥文件的文件权限不会阻止nginx读取它。它是一个RSA私钥,使用openssl rsa
生成。
任何可能导致此问题的想法?
答案 0 :(得分:54)
删除密钥密码:
openssl rsa -in key.pem -out newkey.pem
如果他们的证书和密钥在一起:
openssl rsa -in mycert.pem -out newcert.pem
openssl x509 -in mycert.pem >>newcert.pem
答案 1 :(得分:19)
我明白了...与nginx一起使用的私钥文件必须不有密码。我删除了密码并且它有效。
答案 2 :(得分:10)
因为您使用密码短语生成.crt文件,所以您需要为Nginx conf中的.key和.crt文件指定相同的密码
server {
ssl_password_file /path-to-your-passphrase/ssl.pass;
}
请参阅Nginx Doc
或者,如果您不需要证书文件的密码,只需使用ssh-keygen
工具生成如下文件:
ssh-keygen -t rsa
答案 3 :(得分:2)
这个问题现在有点老了,nginx实际上支持启动时的密码短语,因为至少版本1.2。但问题仍然存在,因为在最新版本的版本8中使用nginx 1.6已将此功能从debian中删除。原因是密码短语输入还没有在nginx的systemd脚本中实现,而它已经用于apache。手动启动nginx只是起作用,并且它不是一个问题,因为无论如何都需要手动干预,这里没有使用systemd。
参考:https://forum.nginx.org/read.php?2,262900,262931#msg-262931