簡體   English   中英

python請求SSL錯誤(證書驗證失敗)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM