当涉及到使用 Python 发起 HTTPS 请求时,保证安全和验证服务器的身份是至关重要的。而 certifi 是一个非常有用的第三方库,它提供了一个包含 CA 证书的集合,用于验证 HTTPS 服务器的证书。本篇博客将会介绍 certifi 库的使用方法和原理。

用 certifi 验证 HTTPS 服务器的身份

在 Python 中,我们通常使用 requestsurlliburllib3 等库来发起 HTTP 请求。当我们尝试与一个使用 HTTPS 协议的服务器通信时,需要帐户安全性的基本保证。这就需要进行证书验证,以确保我们正在连接到正确的服务器,而不是被中间人攻击。

certifi 库可以帮助我们处理这个验证过程。它提供了一个完整的 CA 证书集合,用于验证常见的公共 CA 颁发机构的证书。让我们来看看如何使用 certifi 进行 SSL/TLS 证书验证。

安装 certifi

首先,确保已在 Python 环境中安装 certifi 库。可以使用 pip 包管理器来安装它:

1
pip install certifi

使用 certifi 进行证书验证

一旦我们安装了 certifi 库,就可以在代码中使用它来验证 HTTPS 服务器的证书。以下是一个例子:

1
2
3
4
5
6
7
8
9
10
11
import requests
import certifi

url = 'https://www.cheneyblog.com'

response = requests.get(url, verify=certifi.where())

if response.status_code == 200:
print('Connection successful! Server identity verified.')
else:
print('Failed to establish a secure connection.')

在这个例子中,我们使用了 requests 库来发起一个 GET 请求,并指定了我们要连接的 URL。在请求中,我们将 verify 参数设置为 certifi.where() 方法的返回值。certifi.where() 方法返回了一个标识 CA 证书路径的字符串。

当我们发起请求时,requests 库将使用 certifi 库提供的 CA 证书路径进行证书验证。如果服务器的证书能够通过验证,我们将获得一个状态码为 200 的响应,并打印出 “Connection successful! Server identity verified.” 的消息。否则,我们将得到一个失败的响应,并打印出 “Failed to establish a secure connection.” 的消息。

为何使用 certifi

使用 certifi 的一个主要优点是它提供了一个可靠的、更新的 CA 证书集合。这意味着任何新的 CA 证书颁发机构或吊销的证书都会及时地反映在 certifi 的集合中。这样,我们就可以确保与最新的 CA 证书集合保持同步,从而提高安全性。

除了 requests 库,还可以在其他发起 HTTP 请求的库中使用 certifi 进行证书验证,比如 urlliburllib3。只需将 verify 参数设置为 certifi.where() 即可。

总结一下,certifi 是一个非常有用的第三方库,它为我们提供了一个可靠的 CA 证书集合,用于验证 HTTPS 服务器的证书。通过使用 certifi,我们可以确保与服务器建立安全的连接,从而避免安全漏洞和中间人攻击。在使用 Python 发起 HTTPS 请求时,强烈建议使用 certifi 来增强安全性。