2017-10-09 75 views
1

我想,當我連接到手柄的服務器來解決問題Python的 - 問題SSL:CERTIFICATE_VERIFY_FAILED

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

我也用

ssl._create_default_https_context = ssl._create_unverified_context 

一些用戶建議,但我沒能解決問題。

任何其他解決方案?

感謝

+0

請提供python版本和你的操作系統 – Antwane

+0

@Antwane Centos 7和Python 2.7.5 – Fab

+0

你能解決這個問題嗎? –

回答

0

如果你只是想忽略證書驗證,requests接受驗證關鍵字參數用於此目的:

requests.get('https://www.google.com', verify=False) 

這可能會觸發一個InsecureRequestWarning,但請求應該可以返回不管。

+0

我剛剛試過這個解決方案:'r = requests.get(url,auth = HTTPBasicAuth(user,pwd),verify = False)'。 httpS返回一個空的響應,而HTTP工作正常。 – Fab

0

您的服務器是否具有由認證機構簽署的有效證書?

如果它使用自簽名證書我建議您在Python項目中保存一份公共證書的副本,並在請求的驗證參數中傳遞證書名稱。

您可以通過訪問Firefox上的服務器,單擊地址欄附近的鎖定圖標,選擇證書,然後選擇更多詳細信息,然後選擇查看證書,然後導出來保存證書。

你會得到一個.pem文件,比如說:「my_server_certificate.pem」。

然後當你請求創建Session對象可以傳遞參數:

session = requests.Session() 
session.verify = "my_server_certificate.pem" 

我用我的Python腳本查爾斯代理的時候也有類似的問題。我希望這可以幫助你解決你的問題。

+0

我得到'__init __()得到了一個意想不到的關鍵字參數'verify''。我讀過這個Session不再需要構造函數中的參數。目前該文檔已過時。我嘗試了'session = requests.Session()'和 'session.verify = False',但問題仍然存在。 – Fab

+0

我的不好。是的,你必須創建會話,然後設置session.verify =「my_server_certificate.pem」 –

+0

編輯答案來反映這一點。 –