📌  相关文章
📜  ssl未验证证书python(1)

📅  最后修改于: 2023-12-03 15:20:20.589000             🧑  作者: Mango

SSL 未验证证书 Python

当在 Python 中请求使用 SSL 网络连接时,如果目标网站使用的 SSL 证书未经过验证,则会出现"SSL 证书验证失败"的错误。在本文中,我们将介绍如何在 Python 中消除这个问题。

问题描述

当我们使用 Python 程序进行 SSL 连接时,如果连接的目标网站使用的 SSL 证书未经过验证,则会出现如下错误:

requests.exceptions.SSLError: HTTPSConnectionPool(host='www.example.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'www.example.com' doesn't match either of '*.example.net', 'example.net'")))

这个错误表示 Python 应用程序拒绝了连接,因为目标网站使用的 SSL 证书未经过验证。

解决方案
方法一:禁用 SSL 验证

将 SSL 验证禁用是一个简单的解决方案。虽然此解决方案不太推荐,但对于某些特殊情况下来说,使用它是可行的。

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
方法二:证书验证

证书验证是个更安全的选择。在证书验证期间,Python 应用程序会对 SSL 证书进行验证,以确保它们由正确的机构签发,并与目标网站的域名匹配。

要验证 SSL 证书,您需要指定包含所需 CA 证书的路径,即您信任的 SSL 证书颁发机构的顶级证书,例如:

import requests

response = requests.get('https://www.example.com', verify='/path/to/ca/root.pem')
print(response.text)
结论

无论您使用哪种解决方案,安全性永远是最重要的考虑因素。禁用 SSL 验证虽然可行,但它不太安全。SSL 证书验证虽然更加安全,但需要指定包含 CA 证书的路径。