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

Python3 SSL首次连接正常 仅重连时触发TLS版本错误排查

Python SSL套接字重连触发TLS协议版本错误问题

基础现象

  • 服务端与客户端均运行Python3环境
  • 客户端初始化时会连接服务端并完成身份认证,首次连接全流程无异常
  • 连接断开后,客户端捕获到socket.recv返回0的异常,会重新执行服务端连接逻辑:服务端在监听套接字上收到初始请求、完成连接建立后,后续recv调用会抛出如下错误:
File "/usr/lib64/python3.7/ssl.py", line 1056, in recv
    return self.read(buflen)
  File "/usr/lib64/python3.7/ssl.py", line 931, in read
    return self._sslobj.read(len)
ssl.SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:2570)

复现规律

  • 关闭并重启客户端,下次连接可正常规避错误
  • 若关闭重启服务端,客户端在服务端重启后尝试连接就会遇到该错误
  • 客户端侧会抛出如下错误:
File "\Our_Code", line 100, in make_connection
    data = self.ssl_sock.recv(1024)
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1226, in recv226, in recv
    return self.read(buflen)                                                    101, in read
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1101, in read
    return self._sslobj.read(len)
ssl.SSLError: [SSL] internal error (_ssl.c:2633)

初步排查与现有代码

初步判断问题可能出在客户端,即客户端在重连间隔保留了部分旧连接数据,但重连时代码已经覆盖了套接字对象,按理旧连接的所有数据都应被丢弃。
连接函数实现如下:

import socket
import ssl

    def make_connection(self, email, password):
        try:
            self.ssl_sock = []
    
            HOST = "9:9:99:999"  # 服务端主机名/IP(非真实地址)
            PORT = 5432  # 服务端监听端口(非真实端口)
    
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.connect((HOST, PORT))
            self.ssl_sock = self.context.wrap_socket(sock)
    
            password = password.encode('utf-8').strip()
            password = base64.b64encode(password).decode("utf-8")
    
            tcp_string = (f"^{email}*{password}$")
    
            tcp_string = tcp_string.encode('utf-8')
            self.ssl_sock.sendall(tcp_string)
    
            data = self.ssl_sock.recv(1024)
            data = data.decode('utf-8')
    
            if data == "^good_connect$":
                return True
            else:
                return False
        except Exception:
            print(f"make_connection - {traceback.format_exc()}")

接触Python尤其是网络编程的时间尚短,怀疑是自己犯了基础错误,但目前检索到的资料均指向TLS版本配置错误,可首次连接可正常完成认证的现象说明并非该类问题,可配合提供更多场景相关信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:45:41