2015-01-14 63 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鍵 - ---- *

希望它可以幫助

牛逼

相關問題