当前位置: 首页 > 知识库问答 >
问题:

不一致的Python SSL错误。py:ssl。SSLCertVerificationError:证书验证失败:无法获取本地颁发者证书(_ssl.c:1056)

家浩瀚
2023-03-14

错误

ssl。SSLCertVerificationError:[SSL:证书\u验证\u失败]证书验证失败:无法获取本地颁发者证书(\u SSL.c:1056)验证证书时SSL握手失败

哎呀。客户例外。ClientConnectorCertificateError:无法连接到主机discordapp。com:443 ssl:True[SSLCertVerificationError:(1),[ssl:CERTIFICATE\u Verification\u FAILED]CERTIFICATE Verification FAILED:无法获取本地颁发者证书(_ssl.c:1056)]

完全回溯(156行):https://pastebin.com/xmy4aYcM

调试信息

我正在使用Python 3.7运行完全更新的Raspbian Buster。在覆盆子皮上。

uname-a的输出:

Linux hostname 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l GNU/Linux

输出lsb_release-a

Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

pip冻结的输出

aiohttp==3.5.4
async-timeout==3.0.1
attrs==19.3.0
certifi==2019.9.11
chardet==3.0.4
discord.py==1.2.4
idna==2.8
multidict==4.5.2
pkg-resources==0.0.0
websockets==6.0
yarl==1.3.0
>>> import os
>>> import ssl                                        
>>> openssl_dir, openssl_cafile = os.path.split(      
...     ssl.get_default_verify_paths().openssl_cafile)
>>> os.listdir(openssl_dir)
['openssl.cnf', 'private', 'misc', 'certs']
>>> print(os.path.exists(openssl_cafile))
False

我试过的

我所有的在线搜索都给出了以下两个建议之一:

  • 使用pip安装certifi
  • 这是Mac特有的。一般来说,此错误的所有提及仅在Mac上。

最小复制示例

创建一个venv,并安装软件包

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install ca-certificates python3-venv python3-pip

python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -U setuptools wheel
python3 -m pip install -U discord.py certifi

打开python3提示符,然后运行:

import discord

client = discord.Client()
client.run("token") # error happens here

我在运行Linux和相同Python版本和包的电脑上没有遇到同样的错误。

有什么办法可以做到这一点吗

  • 忽略ssl证书验证检查(如curl上的--unsecure标志),或
  • 正确安装丢失的证书

共有1个答案

丌官星渊
2023-03-14

尝试这样做:

import ssl
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

html = urllib.request.urlopen('https://blahblah.com/something', context=ctx).read()

这将阻止对证书进行验证。否则,您将需要安装它。

 类似资料:
  • 您好,我在构建python映像时遇到问题 错误说, 但是当升级pip时,同样的错误显示。 错误:由于环境原因无法安装程序包错误:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):url超过最大重试次数:/packages/ac/cf/0cc542fc93de2f3b9b53cb979c7d118cffb93204afb4629a

  • 我正在尝试使用python从web获取数据。我导入了urllib。请求包,但在执行时,我得到错误: 我正在Mac OS High Sierra上使用Python 3.7 当我将URL更改为“http”时,我能够获取数据。但是,我相信,这可以避免检查SSL证书。 因此,我在互联网上查找并找到了一个解决方案:运行 这解决了我的问题。但是我对SSL之类的东西一无所知。你能帮我理解它到底做了什么来解决我的

  • 我正在Windows7上运行PHP版本5.6.3作为XAMPP的一部分。 当我尝试使用Mandrill API时,我得到以下错误: 未捕获异常“Mandrill_HttpError”,消息为“API调用消息/send-template失败:SSL证书问题:无法获取本地颁发者证书” 我已经尝试了在StackOverflow上读到的所有内容,包括向php.ini文件添加以下内容: 当然可以从http:

  • 问题内容: 我正在Windows 7上将PHP版本5.6.3作为XAMPP的一部分运行。 当我尝试使用Mandrill API时,出现以下错误: 消息“ API调用消息/发送模板失败”的未捕获异常“ Mandrill_HttpError”:SSL证书问题:无法获取本地颁发者证书 我已经尝试了我在StackOverflow上阅读的所有内容,包括将以下内容添加到php.ini文件中: 当然,还可以从h

  • 问题内容: 我在本地开发环境上使用WAMP,并尝试从信用卡中扣款,但收到错误消息: cURL错误60:SSL证书问题:无法获取本地颁发者证书 我在Google上进行了很多搜索,很多人建议我下载此文件:cacert.pem,将其放在某个位置,然后在php.ini中引用它。这是我的php.ini中的部分: 但是,即使多次重新启动服务器并更改了路径后,我仍然收到相同的错误消息。 我使用来自Apache模

  • 我在Google上搜索了很多,很多人建议我下载这个文件:cacert.pem,把它放在某个地方,并在我的php.ini中引用它。这是我的php.ini中的部分: 然而,即使在重新启动服务器几次并更改路径后,我也会得到相同的错误消息。 我使用Apache模块中的WAMP并启用ssl_module。在PGP扩展中,我启用了php_curl。 这是我正在运行的代码: