現狀: 目標網站(一個PROD預網址,說https://my-pre-prod-site.com/login,例如)使用自簽名證書。 從瀏覽器,該網站是沒有任何問題的,在蟒蛇請求使用自簽名證書
問題說明(自簽名證書的警告是通過在瀏覽器中的證書信任存儲抑制)通過HTTPS訪問: 一個簡單的Python腳本使得get調用使用請求目標站點失敗,或者在不同的情況下,以下錯誤:
requests.exceptions.SSLError: [Errno 0] _ssl.c:344: error:00000000:lib(0):func(0):reason(0)
或
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) The simple script used (on the python prompt) is :
import requests
res = requests.get('https://my-pre-prod-site.com/login')
**的東西已經嘗試過**
- 我做不想跳過SSL驗證。因此,verify = false不適合我。
- 我已經使用以下具有相同的錯誤
res = requests.get('https://my-pre-prod-site.com/login', verify = os.path.join(os.getcwd(),'test.pem')
其中test.pem是通過連接以下命令以該順序輸出創建的PEM文件:
openssl rsa -in ~/Desktop/CertPath/private.key -check
和
openssl x509 -pubkey -noout -in ~/Desktop/CertPath/certificate.pem
該腳本從〜/ Desktop/CertPath運行,因此getcwd()會爲證書提供正確的路徑。
- 我試過另一個test.pem文件,以及連接順序顛倒的地方。它仍然會拋出同樣的錯誤。
- 已嘗試傳遞持有公鑰的.pem文件和持有私鑰的.key文件,分別(單獨)以及與結果相同的錯誤。
環境的詳細信息,如果有幫助
OS - ElCapitan蘋果
要求 - 2.9.0
Python的 - 2.7.10
正在使用Python的 OpenSSL的 - 「OpenSSL的0.9.8zg 7月14日2015'
注 - openssl版本似乎不成問題。因爲即使使用OpenSSL的更新版本,這些錯誤都是一樣的 - 與Python 2.6在Ubuntu 測試了使用OpenSSL 1.x的
作爲一種變通方法,也許你可以使用我們的加密?你的開發配置將更接近你的產品。 – Tom