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

时间:2017-10-06 10:53:37

标签: 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选项指向该文件,但它没有用。我错过了什么吗?

3 个答案:

答案 0 :(得分:11)

正如评论中已经指出的那样:从SSLLabs report可以看出,该网站的SSL实施情况不佳。本报告的主要部分是:

  

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

这意味着服务器未发送验证证书所需的完整证书链。这意味着您需要在验证时自己添加缺少的证书。为此,您需要为缺失的链证书C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA包含PEM,并为根CA C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA信息包含文件my_trust_store.pem,然后您可以致电:

requests.get("https://...", verify='my_trust_store.pem')
  

...但我已尝试下载网站证书并使用验证选项指向该文件

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

答案 1 :(得分:0)

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

如果您的网络需要 CA,这应该可以解决问题

答案 2 :(得分:-5)

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

你应该这样写,我已经验证了

相关问题