Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求SSL错误-证书验证失败_Python_Ssl_Https_Python Requests_Ssl Certificate - Fatal编程技术网

Python请求SSL错误-证书验证失败

Python请求SSL错误-证书验证失败,python,ssl,https,python-requests,ssl-certificate,Python,Ssl,Https,Python Requests,Ssl Certificate,此代码 import requests requests.get("https://hcaidcs.phe.org.uk/WebPages/GeneralHomePage.aspx") 他给了我这个错误 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777) 我对SSL几乎一无所知,但我尝试过下载站点的证书,并使用verify选项指向该文件,但没有成功。我错过什么了吗 import requests ht

此代码

import requests
requests.get("https://hcaidcs.phe.org.uk/WebPages/GeneralHomePage.aspx")
他给了我这个错误

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)
我对SSL几乎一无所知,但我尝试过下载站点的证书,并使用
verify
选项指向该文件,但没有成功。我错过什么了吗

import requests
html = requests.get("https://hcaidcs.phe.org.uk/WebPages/GeneralHomePage.aspx",verify=False).text

您应该这样写,我已经验证了它,正如我在评论中指出的那样:该站点的SSL实现很糟糕,这可以从中看出。关于您的问题,本报告的主要部分是:

此服务器的证书链不完整。等级上限为B

这意味着服务器没有发送验证证书所需的完整证书链。这意味着您需要在验证时自己添加丢失的证书。为此,您需要为丢失的链证书和根CA信息包含PEM文件
my\u trust\u store.PEM
,然后您可以调用:

requests.get("https://...", verify='my_trust_store.pem')
。。。但我已经尝试下载该站点的证书,并使用验证选项指向该文件

这不适用于普通叶证书。由于Python的SSL堆栈基于OpenSSL,并且OpenSSL只需要信任存储中的受信任证书颁发机构(即,通过
验证
)提供,并且服务器证书不是CA证书,因此将其添加到信任存储中是没有帮助的

cat institution-certificate.pem >> venv/lib/python3.9/site-packages/certifi/cacert.pem

如果您的网络需要CA,这应该可以解决问题。您使用的是哪一版本的Python和操作系统?是的,很抱歉,Python 3.6.3和Windows 7该站点的SSL实现不好:如果您想从询问者那里获得更多信息,请使用注释。答案可能会被否决。这只会禁用任何类型的证书验证。这应该只用于测试,而不用于生产,因为它打开了中间人攻击的应用程序。对于家庭脚本IMO来说,足够好了。SLSLAMP报告的好答案是,您可以下载带有中间和根的完整证书链。单击“认证路径”下的“单击此处展开”,然后单击要下载其链的路径旁边的下载图标。将其另存为.pem文件,其路径可用作
verify=
的参数。