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

efd*_*234 31 haproxy

haproxy不再启动,它显示错误

bind <ip>:443' : unable to load SSL private key from PEM file ...
Run Code Online (Sandbox Code Playgroud)

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

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

这是PEM文件的结构:

-----BEGIN CERTIFICATE-----
MIIDXjCCAkY...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKC....
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

我还尝试将私钥转换为

openssl pkcs8 -topk8 -inform pem -in server.key -outform pem -nocrypt -out server_new.key
Run Code Online (Sandbox Code Playgroud)

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

我现在想要几个小时,但我找不到原因.请帮忙!谢谢!

更新:

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

小智 33

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

cat example.com.crt example.com.key > example.com.pem
Run Code Online (Sandbox Code Playgroud)

  • 这个答案解决了我的问题.谢谢你同样的错误!我忘了连接文件了. (3认同)

Tim*_*ski 16

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

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


Den*_*sic 7

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

cat fullchain.pem privkey.pem > example.com.pem
Run Code Online (Sandbox Code Playgroud)

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

bind *:443 ssl crt /etc/letsencrypt/live/example.com/example.com.pem
Run Code Online (Sandbox Code Playgroud)


bru*_*dan 5

我也遇到了这个错误。在开始撕掉头发之前,您可能想要尝试从私钥中删除密码短语。它为我解决了问题。我认为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


小智 5

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

-----结束证书---------- BEGIN RSA私钥-----

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

* -----结束证书-----

----- BEGIN RSA私钥----- *

希望能帮助到你

Ť