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

Python Websocket连接遇ssl.SSLError错误,求适配解决方案

解决WebSocket连接的SSL错误:WRONG_SIGNATURE_TYPE

问题场景

使用Python 3.10.10 + websocket-client库建立WSS连接时遭遇SSL错误,相关代码及报错如下:

连接代码:

url = "wss://my.site/websocket"
ws = websocket.create_connection(url, sslopt={
    "check_hostname": False,
    "cert_reqs": ssl.CERT_NONE
})

报错信息:

File "C:\Python3\lib\ssl.py", line 1342, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_SIGNATURE_TYPE] wrong signature type (_ssl.c:997)

已实现的HTTP请求SSL适配方案

在常规HTTPS请求中,通过自定义SslAdapter解决了同类SSL问题,代码如下:

自定义适配器:

class SslAdapter(requests.adapters.HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        ctx = ssl.create_default_context()
        ctx.set_ciphers('DEFAULT@SECLEVEL=0')

        self.poolmanager = urllib3.poolmanager.PoolManager(
            ssl_version=ssl.PROTOCOL_TLS,
            ssl_context=ctx)

使用方式:

self.session = requests.Session()
self.session.mount("https://my.site/", SslAdapter())

目标站点SSL参数

目标站点连接信息:

"Protocol version": "TLSv1.2",
"Cipher suite": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"Key Exchange Group": "P256",
"Signature Scheme": "RSA-PKCS1-SHA1"

WebSocket的SSL适配方案

参照HTTP的解决思路,通过自定义SSL上下文传入websocket-client的连接参数即可解决问题:

import ssl
import websocket

# 构建自定义SSL上下文
ctx = ssl.create_default_context()
# 降低安全等级,允许目标站点的弱签名算法
ctx.set_ciphers('DEFAULT@SECLEVEL=0')
# 保持原代码中的证书验证关闭配置
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# 传入自定义上下文建立连接
url = "wss://my.site/websocket"
ws = websocket.create_connection(url, sslopt={"ssl_context": ctx})

解决原理

错误WRONG_SIGNATURE_TYPE源于目标站点使用了较旧的RSA-PKCS1-SHA1签名算法,而Python默认的SSL安全等级(SECLEVEL)会限制这类弱算法。通过DEFAULT@SECLEVEL=0降低安全等级,即可允许该签名算法完成SSL握手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:46:14