2016-01-15 103 views
6

我正在努力讓requests庫執行一個簡單的GET請求到我的一個Let's Encrypt證書的網站。一切都很好,我可以通過Chrome訪問它。 (我目前正在運行OSX El Capitan)。Python SSL請求和讓我們加密證書

首先,我試着做一個GET請求網站:

>>> import requests 
>>> requests.get('https://example.com') 

這給了我:

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) 

然後我嘗試過各種東西,包括獲得Let's Encrypt authority certificate抱起來,下面openssl命令驗證我的站點的證書成功:

> openssl s_client -CAfile ./letsencryptauthorityx1.pem -connect example.com:443 

其輸出包括向底部以下幾點:

... 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : DHE-RSA-AES256-SHA 
    Session-ID: ... 
    Session-ID-ctx: 
    Master-Key: ... 
    Key-Arg : None 
    Start Time: 1452865123 
    Timeout : 300 (sec) 
    Verify return code: 0 (ok) 
--- 

也許我失去了一些東西,但在我看來,就好像我的網站因爲根據我提供的讓我們的加密授權證書得到了驗證。所以,我高興地改變了我的Python代碼:

>>> requests.get('https://example.com', verify='./letsencryptauthorityx1.pem') 

但我仍然不斷收到requests.exceptions.SSLError錯誤。我已經使用授權證書的格式DER也嘗試過,但後來我從requests以下錯誤:

requests.exceptions.SSLError: unknown error (_ssl.c:2825) 

任何人可以或許教育我至於怎樣去修復呢?

回答

2

聽起來像您機器上的CA CERTS不是最新的或Web服務器未配置爲服務器的完整證書鏈。

+0

我使用OSX(埃爾卡皮坦)。我嘗試添加ISRG Root X1證書(按照https://support.apple.com/kb/PH18677?locale=en_US),並使其在整個系統中完全可信,但它仍然會提供相同的CERTIFICATE_VERIFY_FAILED錯誤。 –

+0

您可以以私人訊息的形式發送您的主機名與該證書?我只是使用MAC OS X El Capitan重新安裝了我的Mac,它可以在不安裝任何CA的情況下直接使用。我認爲Web服務器未正確配置爲使用完整的證書鏈。 openssl不會失敗的原因是您直接在CLI上授予CA。 –

+0

實際上你是對的。如果我將Web服務器配置爲使用完整的證書鏈,它就像一個魅力!請在此處編輯您的答案,或添加一個不同的答案,以包含關於在Web服務器中使用完整的證書鏈的建議,並將其標記爲已接受。 –