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时,一切正常。
答案 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文件中