Python中忽略或自定义SSL校验

163 阅读1分钟

微信图片_20230808094553.png在Python中进行HTTPS请求时,SSL证书验证是保障通信安全的重要机制,但在开发测试、爬虫或处理自签名证书等特殊场景下,可能需要临时忽略或自定义SSL校验逻辑。本文将详细介绍不同场景下的实现方法及安全注意事项。

requests库****

python

 import requests
  
 # 危险操作:全局禁用验证(影响整个Session)
 response = requests.get('expired.badssl.com', verify=False)
  
 # 更安全的局部禁用(推荐)
 session = requests.Session()
 session.verify = False # 仅当前Session禁用
 response = session.get('self-signed.badssl.com')

urllib3****

python

 import urllib3
  
 # 创建不验证证书的PoolManager
 http = urllib3.PoolManager(
 cert_reqs='CERT_NONE', # 关键参数
 assert_hostname=False # 禁用主机名验证
 )
 response = http.request('GET', 'untrusted-root.badssl.com')

⚠️ 安全风险:此方式会暴露于中间人攻击,仅限测试环境使用。

通过合理选择SSL验证策略,开发者可以在安全性和开发便利性之间取得平衡。在涉及敏感数据的场景中,建议采用证书钉扎或双向SSL认证等增强方案。