[英]python Requests SSL ERROR (certificate verify failed)
我為服務器和客戶端生成了以下自簽名證書。
我已經創建了ca.crt和ca.key。 使用ca.crt和ca.key,我分別為server創建了server.crt,server.key和為client創建了client.crt,client.key。
我正在使用python請求庫作為客戶端。 下面是代碼片段:
import json
import requests
cert = ("/home/tests/certs/client.crt",
"/home/tests/certs/client.key")
class TestCart():
def test_cart(self, **kwargs):
url = "https://192.168.X.Y/cart"
cart_data = {
'id': kwargs.get('id'),
'items': kwargs.get('items')
}
req_data = json.dumps(cart_data)
resp = requests.post(url,
data=req_data,
verify="/home/certs/ca.cert",
cert=cert)
print resp.text
if __name__ == '__main__':
t_cart = TestCart()
data = {'id': 'ba396e79-0f0f-4952-a931-5a528c9ff72c', 'items': []}
t_cart.test_cart(**data)
這給出了例外:
requests.exceptions.SSLError: HTTPSConnectionPool(host='192.168.X.Y',
port=443): Max retries exceeded with url: /cart (Caused by
SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify
failed (_ssl.c:590)'),))
如果我使用verify = False,代碼可以工作,但是我想驗證。 我的要求中的verify值是什么?
強烈建議深入了解有關請求的出色文檔。 它有一章專門介紹SSL證書驗證 ,它解釋了:
您可以使用受信任的CA證書來驗證CA_BUNDLE文件或目錄的路徑:
>>> requests.get('https://github.com', verify='/path/to/certfile')
假設您的服務器證書是由ca.crt
簽名的,則應將其用作verify
參數。
編輯:根據討論,看起來CA和服務器證書使用了同一主題。 這意味着證書驗證假定這是一個自簽名證書,因此會導致證書驗證錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.