haproxy - 无法从PEM文件加载SSL私钥

时间:2015-01-14 16:38:07

标签: haproxy

haproxy不再启动,它显示错误

bind <ip>:443' : unable to load SSL private key from PEM file ...

我们没有更改证书或配置上的任何内容。自上次启动以来,我们只对系统进行了正常更新。

为了找到错误,我生成了一个全新的证书(自签名),但错误仍然存​​在。

这是PEM文件的结构:

-----BEGIN CERTIFICATE-----
MIIDXjCCAkY...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKC....
-----END RSA PRIVATE KEY-----

我还尝试使用

转换私钥
openssl pkcs8 -topk8 -inform pem -in server.key -outform pem -nocrypt -out server_new.key

但是haproxy仍然显示相同的错误。

我现在试了几个小时,但我找不到原因。请帮忙!谢谢!

更新

问题与文件访问有关。 PEM文件存储在/data/ssl/domainname/domainname.pem中。文件权限还可以。当我将PEM文件移动到/ etc / haproxy时,一切正常。

9 个答案:

答案 0 :(得分:27)

证书和密钥文件在pem中出现的顺序非常重要。使用以下命令创建pem文件。

cat example.com.crt example.com.key > example.com.pem

答案 1 :(得分:12)

我在CentOS上遇到的问题是SELinux正在阻碍。要测试SELinux是否存在问题,请以root身份执行以下操作:setenforce 0,然后尝试重新启动haproxy。如果有效,则存在SELinux问题。 (您现在可以重新启用SELinux并尝试使用命令setenforce 1修复底层问题)。

由于我在/ etc / haproxy / certificates文件夹中有证书,因此以下命令用于获取文件restorecon -v -R /etc/haproxy的正确权限(取决于您的操作系统和SELinux配置,这可能会也可能不起作用) 。

答案 2 :(得分:6)

对于letencrypt certbot的最新版本,将在/etc/letsencrypt/live/example.com文件夹中为您生成fullchain.pem和privkey.pem文件。需要将它们组合在一起,以便HAProxy正确读取它。

cat fullchain.pem privkey.pem > example.com.pem

在HAProxy配置中/etc/haproxy/haproxy.cfg

bind *:443 ssl crt /etc/letsencrypt/live/example.com/example.com.pem

答案 3 :(得分:4)

我也遇到过这个错误。在开始撕掉头发之前,您可能想尝试从私钥中删除密码。它解决了我的问题。我认为HAProxy应该在重启时要求你输入密码,但在我的情况下使用'sudo /etc/init.d/haproxy restart

要删除密码,请尝试 'openssl rsa -in [PRIVATE_KEY_FILE] -out nopassphrase.key'

密码必须吗?在下面的链接中有一个讨论。 https://security.stackexchange.com/questions/70495/ssl-certificate-is-passphrase-necessary-and-how-does-apache-know-it

答案 4 :(得分:3)

对我来说,问题是由组合PEM文件中的这一行引起的:

-----结束证书----------开始RSA私钥-----

我拆分后,我可以启动HaProxy并加载它OK:

* ----- END CERTIFICATE -----

-----开始RSA私钥----- *

希望有所帮助

Ť

答案 5 :(得分:1)

您是否将证书的私钥附加到文件末尾?

HAProxy需要一个“完整链”-证书,中间权限(如果有的话),然后是私钥。例如:

cat cert.pem cert.key > /haproxy/certs/fullchain.pem

答案 6 :(得分:0)

对我来说,问题是在键的开头是一个奇怪的角色。

当我cat编辑文件时,此字符未显示,因为该字符为<feff>,也称为UTF-8 BOM (Byte Order Mark)。它只在我用vim打开文件时出现。

我不希望这种情况非常普遍,但希望它能让人有些头疼。

答案 7 :(得分:0)

仅供参考,在我的情况下,我在“----- BEGIN RSA PRIVATE KEY -----”序列前面有空格字符,这打破了pem文件。

答案 8 :(得分:0)

对于在此加入并遇到相同问题的人们,我想补充一点,即您也必须将中间证书也保存在链中... 因此,如果您的链条具有某些层次,则不仅要把rootca还要把中间证书带到您的pem文件中