Исправить ошибку SSL Certify, используя запросы Python - PullRequest
0 голосов
/ 07 ноября 2018

Настройка системы:

  • macOS 10.14.1
  • Python 3.7.0
  • пункт 18,1

Я написал код, который работал в прошлом, но когда я запускаю его сейчас, я получаю следующую ошибку:

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1045)>

Я сталкивался с подобной проблемой раньше, когда пытался использовать запросы для доступа к API, и это не позволяло мне устанавливать соединения через HTTPS. Ошибка не связана с кодом, потому что она работала 6 месяцев назад. Что может быть причиной этого? Что-то с моим сертификатом?

Код, который вызывает моя функция:

url = self.DUST_SERVICE_URL
    request_payload = self._args_to_payload(coordinate, radius=radius)
    response = self._request("POST", url, data=request_payload,
                             timeout=timeout)
    xml_tree = utils.xml(response.text)
    result = SingleDustResult(xml_tree, coordinate)
    return commons.FileContainer(result.ext_detail_table(),
                                 show_progress=show_progress)

Этот код из пакета; Я не писал этот код.

Edit: Полное сообщение об ошибке ниже.

    /Traceback (most recent call last):  
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1317, in do_open
        encode_chunked=req.has_header('Transfer-encoding'))
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1229, in request
        self._send_request(method, url, body, headers, encode_chunked)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1275, in _send_request
        self.endheaders(body, encode_chunked=encode_chunked)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1224, in endheaders
        self._send_output(message_body, encode_chunked=encode_chunked)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1016, in _send_output
        self.send(msg)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 956, in send
        self.connect()
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1392, in connect
        server_hostname=server_hostname)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 412, in wrap_socket
        session=session
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 850, in _create
        self.do_handshake()
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 1108, in do_handshake
        self._sslobj.do_handshake()
    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1045)

Если это проблема SSL (это то, о чем я подозреваю), как мне перейти к сбросу системы по умолчанию? Я никогда не баловался с SSL или соединениями, кроме запросов через Python Requests, поэтому я не знаю, как бы я что-то изменил.

1 Ответ

0 голосов
/ 07 ноября 2018

Проблема с Python 3.7 на macOS. В Python 3.7 включено README.rtf, в котором говорится следующее:

Этот вариант Python 3.7 включает собственную закрытую копию OpenSSL 1.1.0. Устаревшие поставляемые Apple библиотеки OpenSSL больше не используются. Это означает, что сертификаты доверия в системных и пользовательских цепочках ключей, управляемых приложением Keychain Access и утилитой командной строки безопасности, больше не используются по умолчанию модулем Python ssl.

В той же папке есть команда, которая устанавливает пакет сертификатов для использования в Python 3.7 через certifi.

...