2012-02-21 338 views
29

我正试图在Nginx上设置SSL。它不起作用,并且在错误日志中出现以下错误,该错误日志从nginx编译的OpenSSL库中传出。我不知道那个库是什么,但它是nginx的0.8.54版本,我在Ubuntu Linux上使用apt-get安装它。什么是“SSL_CTX_use_PrivateKey_file”“获取密码错误的问题”在Nginx错误日志中表示?

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生成。

任何想法可能会导致什么呢?

回答

17

我知道了......与nginx一起使用的私钥文件必须有而不是有一个密码。我删除了密码,它工作。

+0

如何删除passhprase? – crossle 2013-07-02 09:56:04

+0

我不记得了 - 我可能刚刚用'openssl'生成了一个新的私钥,并且保留了密码。 – 2013-07-02 11:52:29

+0

谢谢,我记得passhprase。 – crossle 2013-07-03 06:49:54

46

拔下钥匙密码短语:

openssl rsa -in key.pem -out newkey.pem 

如果他们的证书和密钥在一起:

openssl rsa -in mycert.pem -out newcert.pem 
openssl x509 -in mycert.pem >>newcert.pem 

来源:http://www.madboa.com/geek/openssl/#key-removepass

+2

非常感谢!我在R'lyeh。你救了我的理智。 – divs1210 2015-05-19 12:26:45

+1

不客气:-)我听到你。我写了这个答案已经两年了,现在我不记得这件事了:D #insanityrealized – 2015-05-20 04:13:23

+0

感谢第一个命令,现在一切正常! – Aminos 2017-02-18 15:12:47

1

的问题是有点老了,和Nginx的实际支持至少从版本1.2开始在启动时询问密码。但是这个问题仍然是相关的,因为这个功能已经在最新版本的debian中从nginx 1.6版本中删除了。原因是密码输入没有在nginx的systemd脚本中实现,而它一直用于apache。手动启动nginx只需要工作,而且这不是一个问题,因为无论如何都需要手动干预,这里没有使用systemd。

参考:https://forum.nginx.org/read.php?2,262900,262931#msg-262931

4

因为你生成一个密码的.crt文件,所以您需要指定你的。关键在Nginx的conf下相同的密码和.crt文件这样

server { 
    ssl_password_file /path-to-your-passphrase/ssl.pass; 
} 

Nginx Doc

或者,如果你不需要为你的证书文件的密码,只需要使用ssh-keygen工具生成的文件如下:

ssh-keygen -t rsa 
+0

据说这只适用于nginx> = 1.7.3 – 2016-08-09 22:08:43

+0

@JosephCoco是的,你是对的。我需要编辑我的答案。 – sudoz 2016-08-10 03:34:44

+0

完美:thumbsup: – Will 2018-01-26 19:11:31