You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.10中requests.post遇SSLV3握手失败报错,3.9正常求解决

SSLV3_ALERT_HANDSHAKE_FAILURE 问题解决(Python 3.10 vs 3.9)

问题背景

使用Python 3.10 + requests 2.31.0 + pyOpenSSL 23.2.0发送POST请求:

res = requests.post(
            url, data=json.dumps(data), headers=self.headers, verify=False
        )

触发报错:

SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:997)')

已知信息:

  • 该请求在Python 3.9环境下可正常执行
  • 本地OpenSSL版本为 OpenSSL 1.1.1n 15 Mar 2022
  • 服务器通过openssl s_client -connect 10.10.96.28:443验证,支持TLSv1.2,加密套件为AES256-GCM-SHA384

解决方法

1. 自定义SSL上下文适配服务器配置

Python 3.10默认的TLS加密套件或版本范围与3.9存在差异,可手动指定TLSv1.2和服务器支持的加密套件:

import requests
import ssl
from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager

class TLS12Adapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        # 创建SSL上下文
        ctx = ssl.create_default_context()
        # 指定服务器支持的加密套件
        ctx.set_ciphers('AES256-GCM-SHA384')
        # 强制启用TLSv1.2
        ctx.options &= ~ssl.OP_NO_TLSv1_2
        kwargs['ssl_context'] = ctx
        return super().init_poolmanager(*args, **kwargs)

# 初始化session并挂载适配器
session = requests.Session()
session.mount('https://', TLS12Adapter())

# 发送请求
res = session.post(url, data=json.dumps(data), headers=self.headers, verify=False)

2. 对齐Python 3.9环境依赖版本

如果自定义上下文过于繁琐,可直接将requests、pyOpenSSL版本降级到Python 3.9环境中可正常运行的版本,消除版本差异带来的配置问题。

3. 禁用ALPN协商

从服务器的openssl s_client结果来看,未协商ALPN协议,而Python 3.10可能默认启用ALPN检查,可在SSL上下文中禁用:

ctx = ssl.create_default_context()
ctx.set_alpn_protocols([])
# 结合其他配置(如指定TLS版本、加密套件)使用

内容的提问来源于stack exchange,提问作者NicoCaldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:06:25