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

Python3.11/3.12升级后遭遇SSL握手失败问题求助

解决Python 3.11/3.12升级后的SSL握手失败问题

问题分析

报错SSLV3_ALERT_HANDSHAKE_FAILURE并非一定是客户端使用了SSLv3协议,通常是服务器与客户端的加密套件不兼容,或者协议协商过程中服务器无法匹配客户端提供的参数。Python 3.11+对默认加密套件做了更严格的限制,移除了一些老旧的、不安全的套件,而你的服务器可能仅支持这些被移除的套件,导致握手失败。

另外你之前的上下文代码存在问题:import ssl语句位置错误,且重复创建上下文覆盖了之前的配置,导致强制TLS 1.2的设置未生效。

解决方案

以下是修正后的代码,通过指定兼容的加密套件、正确配置SSL上下文来解决问题:

import http.client
import ssl

host = "xyzabcd.com"
path = "/getFileDetails"   
headers = {
    "User-Agent": "MyApp", 
    "Authorization": "Bearer token"  
}

# 创建SSL上下文,强制使用TLS 1.2并添加兼容的加密套件
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# 放宽安全级别,兼容服务器支持的老旧加密套件
context.set_ciphers('DEFAULT:@SECLEVEL=1')

# 初始化HTTPSConnection时传入上下文
conn = http.client.HTTPSConnection(host, context=context)

try:
    conn.request(method="GET", url=path, headers=headers)
    response = conn.getresponse()
    print("Status:", response.status)
    print("Reason:", response.reason)
    print("Headers:", response.getheaders())
    data = response.read()
    print("Body:", data.decode("utf-8")) 
except ssl.SSLError as e:
    print("SSL Error:", e)
except Exception as e:
    print("Error:", e)
finally:
    conn.close()

关键说明

  • 修正上下文创建逻辑:直接使用ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)创建仅支持TLS 1.2的上下文,避免重复赋值覆盖配置。
  • 降低安全级别兼容旧服务器:DEFAULT:@SECLEVEL=1会放宽加密套件的安全要求,允许使用一些老旧但服务器支持的套件。如果这个设置仍不生效,可以尝试指定具体的加密套件(比如ECDHE-RSA-AES256-SHA384等,需根据服务器实际支持的套件调整)。
  • 验证服务器支持的套件:可以使用openssl s_client -connect xyzabcd.com:443命令查看服务器支持的加密套件,然后在set_ciphers中指定对应的套件列表。

额外排查点

  1. 检查服务器是否需要SNI支持:Python 3.11+的HTTPSConnection默认已支持SNI,但如果服务器配置特殊,可以显式指定server_hostname参数:
    conn = http.client.HTTPSConnection(host, context=context, server_hostname=host)
    
  2. 确认系统的OpenSSL版本:Python 3.11+依赖的OpenSSL版本较高,如果系统OpenSSL版本过低,可能导致协议或套件支持不足,建议升级系统OpenSSL到1.1.1及以上版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:20:16