忽略SSL证书验证

HTTP&HTTPS

HTTPS为安全超文本传输协议,是HTTP的安全版本,它在HTTP和TCP/IP之间增加了一个SSL/TSL层(安全套接层/传输层协议),用于加密HTTP的通信内容。

SSL证书

一种数字证书,用于在SSL/TLS协议中验证服务器的身份,并启用加密通信。是HTTPS通信中身份验证的关键,当浏览器尝试通过HTTPS连接到服务器时,服务器会提供SSL证书。浏览器会检查证书是否受信任的CA签发,并验证证书的有效性。如果证书验证成功,浏览器会信任服务器,并建立加密连接。如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,会警告用户证书不受信任。拥有有效的SSL证书是网站安全性的标志之一。

在python的urllib标准库中,urlopen函数可以接受一个可选的context参数,这个参数允许指定一个SSL上下文(SSLContext),用于控制HTTPS连接的安全行为。这个上下文可以用来配置SSL证书验证的行为,例如忽略SSL验证或指定CA证书。

urllib.request.urlopen(urldata=None[timeout]*cafile=Nonecapath=Nonecadefault=Falsecontext=None)

# python自带的SSL标准库,使用OpenSSL库作为底层实现
import ssl
from urllib.request import urlopen
# 创建一个不进行证书验证的SSL上下文
context = ssl.create_default_context()
context.check_hostname = False  # 关闭对主机名的检查
context.verify_mode = ssl.CERT_NONE  # 设置了上下文的验证模式为不进行证书验证
# 发送请求并读取响应内容
url = 'http://httpbin.org/get'
resp = urlopen(url, context=context)

详见官网:

https://docs.python.org/3.12/library/urllib.request.html#urllib.request.urlopen

https://docs.python.org/3.12/library/ssl.html#ssl-contexts

posted @ 2024-09-15 16:08  松鼠q  阅读(23)  评论(0编辑  收藏  举报