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

Python Socket客户端SSL连接远程服务器报WRONG_SSL_VERSION错误

问题原因

  • 最核心的错误是SSL握手和TCP连接的顺序错误:你当前的代码是先对未建立TCP连接的普通socket执行wrap_socket(会直接触发SSL握手),再执行TCP连接,握手时底层TCP链路还没就绪,会导致SSL协议协商出错触发版本报错。
  • 次要兼容问题:直接指定ssl.PROTOCOL_TLSv1_2在部分Python版本中会限制协议协商逻辑,部分旧版本的ssl模块该常量的实现存在兼容缺陷,可能误判服务器返回的握手包版本。

修复方案

首先调整调用顺序,先建立TCP连接再做SSL封装握手,同时优化SSLContext的初始化逻辑,修正后的代码如下:

import socket
import ssl

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
# 先建立TCP连接
s.connect((hostname, port))
# 初始化SSLContext,使用兼容性更好的客户端通用协议类型
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
# 显式限制仅允许TLSv1.2协议,和需求匹配
context.min_version = ssl.TLSVersion.TLSv1_2
context.max_version = ssl.TLSVersion.TLSv1_2
# 关闭证书校验和原有逻辑对齐
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
# 对已经建立连接的socket做SSL封装
sslSocket = context.wrap_socket(s, server_hostname=hostname)

如果你使用的Python版本低于3.7,不支持min_version/max_version属性,可以把SSLContext初始化代码替换为:

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)

仅调整连接和wrap_socket的顺序即可解决绝大多数该类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:45:10