Python Запросы, выкидывающие SSLError после загрузки сертификата - PullRequest
0 голосов
/ 02 августа 2020

Я использую команду requests.get () из пакета запросов, но получаю следующую ошибку, указывающую на то, что я считаю, что я не проверяю SSL-соединение должным образом.

requests.exceptions.SSLError : HTTPSConnectionPool (host = 'marketplace.spp.org', port = 443): Превышено максимальное количество повторных попыток с url: / file-browser-api / download / da-lmp-by-location? Path =% 2F2020% 2F08% 2FBy_Day% 2FDA-LMP-SL-202008020100.csv (Вызвано SSLError (SSLError (336265225, '[SSL] PEM lib (_ssl. c: 3524)'),))

Вот способы, которыми я пробовал использовать request.get (). Я пробовал их каждый по отдельности, но все они вернули одну и ту же ошибку.

url = 'https://marketplace.spp.org/file-browser-api/download/da-lmp-by-location?path=%2F{}%2F{:02}%2FBy_Day%2FDA-LMP-SL-{}{:02}{:02}0100.csv'.format(year, month, year, month, day)
r = requests.get(url)
r = requests.get(url, cert='spp_cert.crt')
r = requests.get(url, verify='spp_cert.crt')
r = requests.get(url, verify='/etc/ssl/certs/ca-certificates.crt')

Обратите внимание, что я получил сертификат spp_cert.crt, выполнив команду

echo | openssl s_client -servername marketplace.spp.org -connect marketplace.spp.org:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > spp_cert.crt

Я считаю расположение / etc / ssl / certs / ca-Certific.crt - это место, где находится мой пакет CA, когда я выполнил следующую команду из командной строки bash, чтобы выяснить это.

python3 -m certifi

Хочу отметить, что я использовал verify = False в качестве аргумента, но по мере того, как код развивается от одноразового использования к производственному, я больше не хочу игнорировать это предупреждение. Признаюсь, я немного запутался в том, как работают SSL-сертификаты и проверка, и это, вероятно, является источником моей проблемы.

Наконец, я хочу отметить, что мне удалось загрузить идентичный сертификат через Firefox, но заметил, что у него есть два варианта загрузки сертификата (PEM (cert) PEM (chain)), и у меня есть подозрение, что проблема в том, что мне нужно загрузить цепочку сертификатов, а не только один сертификат. Но я действительно не знаю, как это работает, если это вообще то, что мне нужно сделать, и если это то, что мне нужно сделать, как это сделать с помощью openssl . Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

Проблема действительно заключалась в том, что мне нужно было загрузить цепочку сертификатов, а не только отдельный сертификат. Я не знаю, как это сделать с помощью openssl , как хотелось бы, но я смог сделать это с помощью Firefox.

Это можно сделать, перейдя на веб-сайт, нажав на замок рядом с веб-адресом, щелкнув стрелку рядом с сообщением «Безопасное соединение», щелкнув «Дополнительная информация», перейдя на вкладку «Безопасность», щелкнув «Просмотреть сертификат», затем щелкнув загрузку «PEM ( цепочка) »в разделе« Разное ». Это сертификат, который мне нужен для правильной работы requests.get () .

...