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

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

最佳答案

正如评论中已经指出的那样:从 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以及根 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 证书,因此将其添加到信任库。

关于Python请求SSL错误-证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604114/

相关文章:

python - 无法使用 c 调用 python 引用 Py_Initialize

python - 如何从 lxml 错误中获取更多信息?

ssl - 在 Payara/Glassfish 服务器上更改主密码

excel - 如何覆盖网站安全证书以消除错误?

java - HttpsServer 处理程序未被调用

c++ - 如何用C++实现支持HTTPS的RESTful Web Server?

python - 从 OrderedDict 中删除键和值

python - 带有分类 X 轴的 Matplotlib 带状图 (fill_ Between)

ssl - 用于 OwnCloud 的 Amazon EC2 上的 HTTPS

.htaccess - htaccess - 允许多个域来源、强制 https、强制 www、使用子目录重写 url