欢迎访问宙启技术站
智能推送

Python中ndg.httpsclient.ssl_peer_verification的SUBJ_ALT_NAME_SUPPORT详解

发布时间:2023-12-31 18:57:39

在Python中使用ndg.httpsclient库的ssl_peer_verification选项时,可以通过设置SUBJ_ALT_NAME_SUPPORT选项来控制对证书中的主题备用名称(Subject Alternative Names,SAN)的支持。SUBJ_ALT_NAME_SUPPORT选项是一个布尔值,用于指示是否支持验证证书中的SAN字段。

在传统的SSL证书中,只能通过使用Common Name(CN)字段来指定主机名。然而,在现代的web应用中,一个服务器可能会托管多个不同的域名或子域名,这时就需要使用SAN字段来指定主机名。因此,如果要在Python中支持验证SAN字段,需要打开SUBJ_ALT_NAME_SUPPORT选项。

下面是一个使用SUBJ_ALT_NAME_SUPPORT选项的例子:

import urllib3
from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT

# 创建一个urllib3.PoolManager对象
http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
                           headers={'User-Agent': 'Mozilla/5.0'},
                           ssl_version=ssl.PROTOCOL_TLSv1_2,
                           sslmatch_hostname=False,
                           ssl_config={
                               SUBJ_ALT_NAME_SUPPORT: True
                           })
                           
# 发送请求
response = http.request('GET', 'https://www.example.com')

# 输出响应内容
print(response.data)

在上面的例子中,我们创建了一个urllib3.PoolManager对象,并将SUBJ_ALT_NAME_SUPPORT选项设置为True。这样,当发送请求时,urllib3会通过SUBJ_ALT_NAME_SUPPORT标志来告诉ndg.httpsclient库检查证书中的SAN字段。

通过打开SUBJ_ALT_NAME_SUPPORT选项,我们可以确保在验证服务器证书时,ndg.httpsclient库会同时验证主题备用名称。这在处理多个域名或子域名的web应用时非常有用。

需要注意的是,使用SUBJ_ALT_NAME_SUPPORT选项要求安装ndg-httpsclient库。可以通过pip命令进行安装:

pip install ndg-httpsclient

然后,我们就可以在Python代码中使用SUBJ_ALT_NAME_SUPPORT选项了。