Запросы на Python "проверка сертификата не удалась"
Я поддерживаю мини-приложение Python, которое использует запросы + HTTPS.
Приложение работало до тех пор, пока IP-адрес имени хоста в URL-адресе HTTPS не изменится (законно). Если я укажу свой браузер на URL-адрес, я могу получить его в порядке.
Где Python/запросы хранят аналог ssh known_hosts и как его очистить для этого хоста?
$ python --version
Python 2.7.3
$ cat foo.py
import requests
url = "https://somehost/resource.json"
requests.get(url, timeout=5, config={'danger_mode': True})
$ source venv/bin/activate
$ python foo.py
Traceback (most recent call last):
File "foo.py", line 3, in <module>
requests.get(url, timeout=5, config={'danger_mode': True})
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 65, in get
return request('get', url, **kwargs)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 241, in request
r.send(prefetch=prefetch)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/models.py", line 641, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Ответы
Ответ 1
Вы используете древнюю версию запросов. При обновлении до 2.0 вы получите более полезное сообщение, и если на вашем сайте будет несоответствие сертификата, вы сможете исправить его, указав системные сертификаты, которые смогут проверять промежуточный сертификат. Вы также можете просто запросить подтверждение своего сертификата, как предложил Андре.
Ответ 2
Оказалось, что во время обновления сервера, упомянутого в вопросе, был установлен неверно подписанный сертификат. HTTPS в браузере работал из-за различий в корневом сертификате между браузером Windows и клиентом Ubuntu Python. HTTPS через браузер с той же машины Ubuntu, на которой был запущен Python, обнаружил детали проблемы сертификата.
Изменение IP-адресов мало связано с проблемой, за исключением того, чтобы путать вещи.
Продвижение моего комментария к ответу:
- Это ответ на мой вопрос
- Этот вопрос получает достаточное количество трафика. Я хотел бы поделиться знаниями.