首页 > 解决方案 > SSL:urllib 中的证书验证失败 - Python 3.6.13

问题描述

我正在尝试从 MoleculeNet 数据集中获取deepchem用于我的深度学习项目的数据。但是由于 Python3.6 的 urllib,加载数据集会导致错误。另外,我使用的是 Ubuntu 16.04。

import deepchem
tasks, datasets, transformers = deepchem.molnet.load_delaney(featurizer='GraphConv')

您可以在下面找到错误日志和消息:

File "/usr/lib/python3.6/urllib/request.py", line 1349, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/usr/lib/python3.6/http/client.py", line 1287, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1333, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1282, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1042, in _send_output
    self.send(msg)
  File "/usr/lib/python3.6/http/client.py", line 980, in send
    self.connect()
  File "/usr/lib/python3.6/http/client.py", line 1448, in connect
    server_hostname=server_hostname)
  File "/usr/lib/python3.6/ssl.py", line 407, in wrap_socket
    _context=self, _session=session)
  File "/usr/lib/python3.6/ssl.py", line 817, in __init__
    self.do_handshake()
  File "/usr/lib/python3.6/ssl.py", line 1077, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)

我搜索了该问题并阅读了有关在 SSL:CERTIFICATE_VERIFY_FAILED 上使用以下命令在 Ubuntu 18.04.1 上创建新证书的信息:

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

但是这个解决方案对我不起作用,我仍然遇到同样的错误,可能是因为我使用的是 Ubuntu 16.04 而不是 Ubuntu 18.04。

尝试urllib向 Google 发送请求工作正常,下面我得到代码 200。

import requests
requests.get("https://google.com")

由于这个问题,我无法运行我的深度学习程序,而且我以前从未遇到过这种安全错误。我会感谢你的任何帮助。

标签: python-3.xlinuxsslpython-requestsurllib

解决方案


推荐阅读