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选项了。
