2015-01-14 66 views
21

HAProxy的已经不启动,它显示HAProxy的 - 无法加载从PEM文件SSL私钥

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时,一切正常。

回答

7

我在CentOS上遇到的问题是SELinux正在忙于解决问题。要测试SELinux是否是问题,请以root身份执行以下操作:setenforce 0,然后尝试重新启动haproxy。如果可行,那就是SELinux问题。 (您现在可以重新启用SELinux并尝试使用命令setenforce 1修复潜在的问题)。

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

18

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

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

这是我的PEM文件的顺序,你可以在我的问题看......但由于 – efdev1234

+1

这个回答解决我的问题。谢谢你同样的错误!我忘记了连接文件。 – Eye

+0

这可能已经改变,因为我得到它与在PEM文件中的公共证书前面的私钥一起工作。我得到了同样的错误,但在我的情况下,这是因为我在Docker中运行HAProxy,但忘记将容量添加到容器中,以便HAProxy可以看到PEM。 – NickRamirez

0

这个问题对我来说是一个奇怪的字符在关键的开始。

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

我不希望这是很常见的,但希望它可以节省一些人的头痛。

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

2

对我来说,问题是由该行合并PEM文件引起的:

----- END CERTIFICATE ---------- BEGIN RSA私钥---- -

后,我把它分解我可以开始HAProxy的并加载它确定:

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

----- BEGIN RSA PRIVATE键 - ---- *

希望它可以帮助

牛逼

相关问题