2017-03-01 68 views
6

我收到SSL「錯誤的握手」錯誤。對這個問題的大多數類似的迴應似乎源於舊的庫,1024位證書。不兼容等...我認爲我是最新的,並不能找出爲什麼我得到這個錯誤。儘管符合最新依賴關係,但Python請求出現SSL錯誤

設置:

  • 請求2.13.0
  • CERTIFI 2017年1月23日
  • '的OpenSSL 1.0.2g 2016年3月1日'

我打這個API(2048位證書鍵):https://api.sidecar.io/rest/v1/provision/application/device/count/

並獲取此錯誤: requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

https://github.com/sidecar-io/sidecar-python-sdk/blob/master/sidecar.py

1.44如果我在請求啓動verify=False,我可以繞過,但我寧願弄清楚爲什麼認證失敗。

任何幫助非常感謝,謝謝!

回答

6

驗證失敗,因爲您訪問的服務器安裝不正確,即它不是您的設置或代碼的錯誤。縱觀report from SSLLabs看到

This server's certificate chain is incomplete. Grade capped to B.

這意味着服務器發送一個缺少中間證書到受信任的根,因此您的客戶端無法建立信任鏈中的證書鏈。大多數桌面瀏覽器通過嘗試從其他地方獲取缺少的證書來解決此問題,但在這種情況下,普通TLS庫將失敗。您需要明確添加缺少的鏈證書的信任來解決此問題:

import requests 
requests.get('https://api.sidecar.io', verify = 'mycerts.pem') 

mycerts.pem應包含缺少中間證書和可信根證書。 mycerts.pem的測試版可以在http://pastebin.com/aZSKfyb7中找到。

+0

很好,謝謝你的見解! –

0

這可能有助於解決您的問題。

print(requests.get(url, proxies,verify = False))