SSL: CERTIFICATE_VERIFY_FAILED
Дорогие программисты из StackOverflow, надеюсь кто-либо из вас может мне помочь.
Вот что произошло: У меня скрипт питона, который выполняет запросы на веб-сервис с помощью библиотеки requests. Соединение с Веб-сервисом отрывается под протоколе HTTPS, и до буквально пару часов назад все работало нормально.
После отключения/подключения сервера на другом зале, скрипт перестал работать, выдает теперь сбой:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
Для сведение, код с использованием функцией requests.post:
import requests
r=requests.post(url="https://moilokalnyserver.moidomen/put/do/metoda",
data="User=MoiPolzovatel&Password=MoiParol",
headers={'Content-type': 'application/x-www-form-urlencoded'},
verify=True)
Полный выход:
Traceback (most recent call last):
File "C:\Python\Python36\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "C:\Python\Python36\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 345, in _make_request
self._validate_conn(conn)
File "C:\Python\Python36\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 844, in _validate_conn
conn.connect()
File "C:\Python\Python36\lib\site-packages\requests\packages\urllib3\connection.py", line 326, in connect
ssl_context=context)
File "C:\Python\Python36\lib\site-packages\requests\packages\urllib3\util\ssl_.py", line 324, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "C:\Python\Python36\lib\ssl.py", line 401, in wrap_socket
_context=self, _session=session)
File "C:\Python\Python36\lib\ssl.py", line 808, in __init__
self.do_handshake()
File "C:\Python\Python36\lib\ssl.py", line 1061, in do_handshake
self._sslobj.do_handshake()
File "C:\Python\Python36\lib\ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
Вопрос о том, какая может быть причина ведь запросы нормально отлично работали и вдруг сбой? Благодарю за любое предложение на решение.
Актуализация
Используя Postman и обычный запрос через браузера, появляется сбой 500. Однако при открытии информации по сертификату, она действительна.
Посмотрел решения, предложенные на ответах этого вопроса на английском сайте StackOverflow, но учитывая что раньше все работало нормально, думаю что есть еще какая-то проблема, связанная с перезагрузкой сервера.
Ответы (2 шт):
Так, я успел временно обойти такой сбой, путем отключения верификации сертификата verify=False.
Внизу отображается полная строка:
r=requests.post(url="https://moilokalnyserver.moidomen/put/do/metoda",
data="User=MoiPolzovatel&Password=MoiParol",
headers={'Content-type': 'application/x-www-form-urlencoded'},
verify=False)
В первую минуту думал, что не помогло, потому что появляется предупреждение:
Warning (from warnings module): File "C:\Python\Python36\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 852 InsecureRequestWarning) 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
На такое предупреждение стоит обращать внимание в связи с рисками безопасности, т.е. такое является временным решением. Сама проблема остается. Чтобы отключить предупреждения, нужно добавить следующую строку, прежде чем отправить запрос HTTPS:
requests.packages.urllib3.disable_warnings()
"SSL: CERTIFICATE_VERIFY_FAILED" - бот пытается связаться с сайтом, но видит у него неизвестный сертификат. Нужно вручную загрузить этот сертификат в доверенные:
- На сайте нажать на замок (рядом с url) --> найти действительный сертификат --> во вкладке дополнительно экспортировать его в формате ".crt"
- Oткрыть "MMC" через пуск. Далее файл --> добавить оснастку --> сертификаты --> добавить --> моей учётной (затем также добавить для локального пк) --> откройте через корень консоли сертификаты - локальный пк --> действие --> все задачи --> далее и обзор --> найдите скачанный в п.1 сертификат --> готово!