ndg.httpsclient.ssl_peer_verification库中SUBJ_ALT_NAME_SUPPORT的基本原理和应用场景
SUBJ_ALT_NAME_SUPPORT是在ndg.httpsclient.ssl_peer_verification库中的一个常量,它指示是否支持SSL证书中的subjectAltName字段。subjectAltName字段是一种扩展字段,用于在SSL证书中指定其他可信任的主机名(域名)。通常,SSL证书中的CN(Common Name)字段用于指定主机名,但subjectAltName字段的优先级更高,可以同时指定多个可信任的主机名。
基本原理:
ndg.httpsclient.ssl_peer_verification库中的SUBJ_ALT_NAME_SUPPORT的基本原理是通过检查SSL证书的subjectAltName字段来验证服务器主机名的可信性。如果支持此常量,则可以使用其中的一组主机名进行验证,而不仅仅使用CN字段。
应用场景:
SUBJ_ALT_NAME_SUPPORT的主要应用场景是当一个服务器部署了多个域名(主机名),而且每个域名都有自己的SSL证书时。在这种情况下,验证服务器主机名时仅仅使用CN字段可能无法满足需求,因为CN字段只能指定一个主机名。通过使用SUBJ_ALT_NAME_SUPPORT,可以指定多个主机名,以便正确验证服务器的身份。
使用例子:
下面是一个使用SUBJ_ALT_NAME_SUPPORT的例子:
import urllib2
import ndg.httpsclient.ssl_peer_verification as ssl_pv
# 设置验证证书时使用subjectAltName字段
ssl_pv.SUBJ_ALT_NAME_SUPPORT = True
# 指定多个可信任的主机名
valid_hostnames = ['www.example.com', 'example.com']
url = "https://www.example.com"
# 创建自定义的HTTPS处理器
https_handler = urllib2.HTTPSHandler(ssl_context=ssl_pv)
# 创建OpenerDirector对象,并指定HTTPS处理器
opener = urllib2.build_opener(https_handler)
# 安装OpenerDirector对象作为默认的urlopen使用的处理器
urllib2.install_opener(opener)
# 发送请求
try:
response = urllib2.urlopen(url)
print(response.read())
except urllib2.URLError as e:
print("Error: %s" % e)
在这个例子中,我们设置SUBJ_ALT_NAME_SUPPORT为True,表示支持SSL证书中的subjectAltName字段。然后指定了两个可信任的主机名:'www.example.com'和'example.com'。通过创建自定义的HTTPS处理器并传入ssl_pv,我们可以在HTTPS请求中使用该验证设置。最后,我们发送一个HTTPS请求到指定URL,并根据返回结果进行处理。
