it-roy-ru.com

python запрашивает SSL ERROR (проверка сертификата не удалась)

Я сгенерировал следующие самозаверяющие сертификаты для своего сервера и клиента.

Я создал ca.crt & ca.key. Используя ca.crt & ca.key, я создал server.crt, server.key для server и client.crt, client.key для client соответственно.

Я использую библиотеку запросов 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 __== '__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в моем запросе?

2
nebi

Настоятельно рекомендуется глубже взглянуть на отличную документацию для запросов. У него есть специальная глава о Проверка сертификата SSL , которая объясняет:

Вы можете передать проверку пути к файлу или каталогу CA_BUNDLE с сертификатами доверенных CA:

>>> requests.get('https://github.com', verify='/path/to/certfile')

Предполагая, что ваш сертификат сервера был подписан вашим ca.crt, вы должны использовать его для параметра verify.

Правка: на основе обсуждения, похоже, что CA и сертификат сервера использовали одну и ту же тему. Это означает, что проверка сертификата предполагает, что это самозаверяющий сертификат, что приводит к ошибке проверки сертификата.

0
Steffen Ullrich