Ошибка проверки SSL-сертификата пула соединений HTTPS - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь очистить веб-сайт списков недвижимости, используя Python 3 и библиотеку запросов

url = 'https://www.mlslistings.com'
page = requests.get(url)

, и у меня возникает следующая ошибка:

SSLError: HTTPSConnectionPool(host='www.mlslistings.com', port=443): Max retries exceeded with url: /Search/Result/299ae029-54cd-404d-bf6c-edab2dc896cc/1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1045)')))

I 'Я могу решить проблему с помощью

url = 'https://www.mlslistings.com'
page = requests.get(url,verify=False)

Но я предупрежден, что

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)

Я перешел по ссылке и нашел их рекомендацию на pip install certifi, а затем попытался

import certifi
import urllib3
http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
http.request('GET', 'https://mlslistings.com')

Но при этом у меня возникает тот же SSLError, который описан выше.

Поэтому у меня есть два вопроса: 1. Почему добавление проверки сертификата «настоятельно рекомендуется»? И 2. Что я могу сделать, чтобы получитьмимо этого просто не сдаваясь и не используя verify=False?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Чтобы это работало без отключения проверки, перейдите на сайт с помощью веб-браузера и экспортируйте корневой сертификат (верхний элемент в пути сертификации) в формате base64.Затем, когда вы делаете свой набор вызовов, убедитесь, что он совпадает с путем экспорта сертификата.

page=requests.get(url, verify='/path/to/exported/certificate.cer')

Зачем проверять сертификаты?Чтобы убедиться, что вы делаете вещи в безопасности.

0 голосов
/ 14 мая 2019

Похоже, вы пропустили s сертификат SSL в вашем URL. Попробуйте с этим

url = 'https://www.mlslistings.com'
page = requests.get(url)
...