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

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的证书验证方式,放宽了对数字证书的要求,允许不合法的证书通过验证。但在生产环境中应慎重使用,以避免安全隐患。