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 шт):

Автор решения: Fabio Mendes Soares

Так, я успел временно обойти такой сбой, путем отключения верификации сертификата 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()
→ Ссылка
Автор решения: Ni9ght

"SSL: CERTIFICATE_VERIFY_FAILED" - бот пытается связаться с сайтом, но видит у него неизвестный сертификат. Нужно вручную загрузить этот сертификат в доверенные:

  1. На сайте нажать на замок (рядом с url) --> найти действительный сертификат --> во вкладке дополнительно экспортировать его в формате ".crt"
  2. Oткрыть "MMC" через пуск. Далее файл --> добавить оснастку --> сертификаты --> добавить --> моей учётной (затем также добавить для локального пк) --> откройте через корень консоли сертификаты - локальный пк --> действие --> все задачи --> далее и обзор --> найдите скачанный в п.1 сертификат --> готово!
→ Ссылка