Python中CERT_OPTIONAL参数的作用和影响及如何正确使用
发布时间:2023-12-25 03:36:40
在Python的ssl模块中,可以通过设置CERT_OPTIONAL参数来控制SSL/TLS的证书验证方式。CERT_OPTIONAL参数的作用是,在进行SSL/TLS连接时,允许服务端提供的数字证书不被认可或不合法时,仍然建立连接,但会提醒用户该连接不是安全的。
CERT_OPTIONAL参数的影响是,它放宽了数字证书的验证要求,允许不合法的证书通过验证。这对于开发人员或测试环境中的临时解决方案很有用,但在生产环境中不建议使用,因为它可能会导致安全隐患。
以下是一个正确使用CERT_OPTIONAL参数的例子,首先需要通过导入ssl模块来使用它:
import ssl import urllib.request # 创建一个SSL上下文对象 context = ssl.create_default_context() # 设置CERT_OPTIONAL参数 context.check_hostname = False context.verify_mode = ssl.CERT_OPTIONAL # 使用SSL上下文对象发起HTTPS请求 url = "https://www.example.com" response = urllib.request.urlopen(url, context=context)
在上述例子中,首先使用ssl.create_default_context()函数创建了一个默认的SSL上下文对象,然后通过设定context.check_hostname和context.verify_mode属性,将CERT_OPTIONAL参数设置为True。
接下来,可以使用urllib.request.urlopen()函数发起一个HTTPS请求,并传入之前创建的SSL上下文对象context。在建立连接时,如果提供的数字证书不被认可或不合法,该连接仍然会被建立,但会收到一个警告。
需要注意的是,CERT_OPTIONAL参数只会影响到使用了SSL上下文对象的请求。如果不使用SSL上下文对象,而是直接使用urllib.request.urlopen()函数发起HTTPS请求,则不会受到CERT_OPTIONAL参数的影响。
总结起来,CERT_OPTIONAL参数在Python中的作用是控制SSL/TLS的证书验证方式,放宽了对数字证书的要求,允许不合法的证书通过验证。但在生产环境中应慎重使用,以避免安全隐患。
