Python 如何使Python的请求信任自签名的SSL证书

Python 如何使Python的请求信任自签名的SSL证书

在本文中,我们将介绍如何使Python的请求库(requests)信任自签名的SSL证书。通常情况下,Python的请求库默认会验证SSL证书的有效性,如果使用的是自签名的SSL证书,即使该证书正确并没有过期,请求库仍然会抛出SSL错误。这是因为默认情况下,请求库会尝试从操作系统所提供的信任证书证书存储中获取证书链,并对该证书链进行验证。对于自签名证书来说,由于其证书链无法在操作系统的信任证书存储中找到,验证过程会失败。下面我们将介绍两种方法来解决这个问题。

阅读更多:Python 教程

方法一:禁用SSL验证

一种简单的方法是禁用SSL验证,这样就可以使Python的请求库信任自签名的SSL证书。虽然这种方法简单快捷,但是它牺牲了SSL证书验证的安全性。

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

response = requests.get('https://example.com', verify=False)
print(response.text)

在上面的示例代码中,我们首先导入了requests库和InsecureRequestWarning异常,然后使用disable_warnings方法禁用了SSL验证警告信息。最后,我们使用get方法发送了一个HTTPS请求,并将verify参数设置为False,表示禁用SSL验证。

方法二:信任自签名的SSL证书

如果需要保留SSL验证的安全性,我们可以通过导入自签名SSL证书并将其添加到信任证书存储中的方式来信任自签名的SSL证书。

首先,我们需要将自签名的SSL证书保存到本地,假设保存为self-signed.crt文件。然后,我们可以使用certifi包提供的where()方法来获取证书存储路径:

import requests
import certifi

cert_path = certifi.where()
print(cert_path)

在上面的示例代码中,我们导入了requests库和certifi库,并使用where()方法获取了证书存储路径。

接下来,我们可以使用以下代码将自签名的SSL证书添加到证书存储中:

import requests
import certifi

cert_path = certifi.where()

# 添加自签名的SSL证书
with open('self-signed.crt', 'rb') as f:
    certificate = f.read()
    with open(cert_path, 'ab') as cert_file:
        cert_file.write(certificate)

response = requests.get('https://example.com')
print(response.text)

在上面的示例代码中,我们通过打开自签名的SSL证书文件并将证书内容写入证书存储中来添加自签名的SSL证书。

请确保将self-signed.crt替换为自签名证书的实际文件名,并注意使用正确的路径和权限执行这些操作。

总结

本文介绍了两种方法来使Python的请求库信任自签名的SSL证书。禁用SSL验证可以简单、快捷地解决问题,但会牺牲验证的安全性。而导入自签名SSL证书可以保留SSL验证的安全性,但需要手动将证书添加到证书存储中。根据具体需求和安全性要求,可以选择适合的方法来解决这个问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程