SSL: CERTIFICATE_VERIFY_FAILED с Python3

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

Я следовал по этой ссылке в качестве учебника: https://www.youtube.com/watch?v=5GzVNi0oTxQ

После того же кода, что и он, я получаю эту ошибку:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 1240, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1083, in request
    self._send_request(method, url, body, headers)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1128, in _send_request
    self.endheaders(body)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1079, in endheaders
self._send_output(message_body)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 911, in _send_output
    self.send(msg)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 854, in send
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1237, in connect
server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
_context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

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

Traceback (most recent call last):
  File "WorldCup.py", line 3, in <module>
    x = urllib.request.urlopen('https://www.google.com')
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 162, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 465, in open
    response = self._open(req, data)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 483, in _open
'_open', req)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 443, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 1283, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 1242, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]     certificate verify failed (_ssl.c:645)>

Может кто-нибудь помочь мне разобраться, как это исправить?

Ответы

Ответ 1

Перейдите в папку, где установлен Python, например, в моем случае она установлена ​​в папке "Программы" с именем папки "Python 3.6". Теперь дважды щелкните "Install Certificates.command". После этого ошибка исчезла.

Ответ 2

В моем случае я использовал модуль ssl для "обхода" сертификации следующим образом:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

Затем, чтобы прочитать содержание ссылки, вы можете использовать:

urllib.request.urlopen(urllink)

Ответ 3

При использовании самоподписанного сертификата urllib3 версии 1.25.3 отказывается игнорировать сертификат SSL

Чтобы исправить, удалите urllib3-1.25.3 и установите urllib3-1.24.3

pip3 uninstall urllib3

pip3 install urllib3==1.24.3

Протестировано на Linux MacOS и Window $

Ответ 4

Лучший ответ для меня. Я получаю эту ошибку, используя Pandas read_html. В моем дистрибутиве python нет "Install Certificates.command". Добавление команды ssl._create_default_https_context в мой сценарий устранило проблему.

Ответ 5

На Debian 9 мне пришлось:

$ sudo update-ca-certificates --fresh
$ export SSL_CERT_DIR=/etc/ssl/certs

Я не уверен, почему, но эта переменная окружения никогда не задавалась.