Python 请求 SSL 错误 - 证书验证失败
Python requests SSL error - certificate verify failed
此代码
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
你应该这样写,我验证过了
正如评论中已经指出的那样:从 SSLLabs report 中可以看出,该站点的 SSL 实现很糟糕。本报告关于您的问题的主要部分是:
This server's certificate chain is incomplete. Grade capped to B.
这意味着服务器没有发送验证证书所需的完整证书链。这意味着您需要在验证时自己添加缺少的证书。为此,您需要包含缺失链证书的 PEM C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA and also for the root 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')
... but I've tried downloading the site's certificate and pointing to that file using the verify option
这不适用于普通的叶证书。由于 Python 的 SSL 堆栈基于 OpenSSL,并且 OpenSSL 只需要信任库中的受信任证书颁发机构(即用 verify
给出)并且服务器证书不是 CA 证书,因此添加它无济于事到信任库。
cat institution-certificate.pem >> venv/lib/python3.9/site-packages/certifi/cacert.pem
如果您的网络需要 CA
,这应该可以解决问题
如果可以避免证书验证(不安全),请将 PYTHONHTTPSVERIFY 环境变量设置为 0:
export PYTHONHTTPSVERIFY=0
这将跳过证书验证。
此代码
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
你应该这样写,我验证过了
正如评论中已经指出的那样:从 SSLLabs report 中可以看出,该站点的 SSL 实现很糟糕。本报告关于您的问题的主要部分是:
This server's certificate chain is incomplete. Grade capped to B.
这意味着服务器没有发送验证证书所需的完整证书链。这意味着您需要在验证时自己添加缺少的证书。为此,您需要包含缺失链证书的 PEM C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA and also for the root 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')
... but I've tried downloading the site's certificate and pointing to that file using the verify option
这不适用于普通的叶证书。由于 Python 的 SSL 堆栈基于 OpenSSL,并且 OpenSSL 只需要信任库中的受信任证书颁发机构(即用 verify
给出)并且服务器证书不是 CA 证书,因此添加它无济于事到信任库。
cat institution-certificate.pem >> venv/lib/python3.9/site-packages/certifi/cacert.pem
如果您的网络需要 CA
,这应该可以解决问题如果可以避免证书验证(不安全),请将 PYTHONHTTPSVERIFY 环境变量设置为 0:
export PYTHONHTTPSVERIFY=0
这将跳过证书验证。