使用Python Zeep模块发送SOAP请求时遇requests.exceptions.SSLError求助
解决Zeep中
UNSAFE_LEGACY_RENEGOTIATION_DISABLED SSL错误 这个错误不是证书验证问题(所以verify=False无效),核心原因是目标服务器使用了旧版SSL重协商机制,而Python 3.10+依赖的OpenSSL默认禁用了这种不安全的协商方式。以下是两种可行的解决方法:
方法1:自定义Zeep的请求会话(推荐)
通过给Zeep配置带有自定义SSL上下文的requests会话,允许旧版重协商:
import requests import ssl from zeep import Client from zeep.transports import Transport # 创建允许旧版SSL重协商的上下文 ctx = ssl.create_default_context() ctx.options |= 0x4 # 启用OP_LEGACY_SERVER_CONNECT标志 # 配置requests会话 session = requests.Session() session.verify = False # 若需要跳过证书验证可保留,否则移除 # 挂载自定义SSL上下文的适配器 adapter = requests.adapters.HTTPAdapter(ssl_context=ctx) session.mount("https://", adapter) # 将会话传给Zeep的Transport transport = Transport(session=session) client = Client('https://PLACEHOLDER_URL.COM/PLACEHOLDER.asmx?WSDL', transport=transport)
方法2:临时修改OpenSSL配置(全局生效,不推荐)
通过环境变量临时禁用OpenSSL的安全限制,仅适合测试场景:
- Linux/macOS终端:
export OPENSSL_CONF=/dev/null python your_script.py
- Windows命令提示符:
set OPENSSL_CONF=NUL python your_script.py
注意事项
启用旧版SSL重协商存在安全风险,仅建议在信任的内部服务器或测试环境中使用。
内容的提问来源于stack exchange,提问作者hillsonghimire
相关产品推荐
相关产品推荐

