Javascript 无法连接到 python 安全 websockets

问题描述 投票:0回答:1

我有一两年就有了 python websockets,我通常有两个客户端连接,一个使用 C#,一个使用 python。

我最近开始开发 Web 客户端并尝试使用 JS Websocket,但它抛出了一个错误:

Firefox can’t establish a connection to the server at wss://*url removed for privacy*/.
与 Chrome 相同:
WebSocket connection to 'wss://*url removed for privacy*/' failed

这就是我的服务器端:

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_cert = "*path to cert*"
ssl_key = "*path to key*"

ssl_context.load_cert_chain(ssl_cert, keyfile=ssl_key)
async def main():
    async with websockets.serve(echo, "0.0.0.0", 465, ssl=ssl_context):
        print(f'Listening on port 465')
        await asyncio.Future()

如果需要的话我可以分享回显功能

这是我用于连接的Python代码:

async with websockets.connect("wss://*URL removed for privacy*") as websocket:
            await websocket.send('*data sent*')
            response = await websocket.recv()

工作正常

在我的 C# 客户端上:

wsc = new WebsocketClient('wss://*URL Removed for privacy*');
wsc.ReconnectTimeout = TimeSpan.FromSeconds(15);
wsc.ReconnectionHappened.Subscribe(info => Console.WriteLine($"Reconnection happened, type: {info.Type}"));
await wsc.Start();

工作正常

还有 JS 客户端:

const socket = new WebSocket("wss://*URL Removed for privacy*");
socket.addEventListener("open", (event) => {
    socket.send("*data sent*");
});

抛出错误

我什至不知道为什么它无法连接,因为没有有关连接尝试的详细信息。

感谢您的帮助

javascript python websocket
1个回答
0
投票

我最近花了一些时间在干净的 Debian 安装上尝试一些东西,并找出导致问题的原因。

端口 TCP/465 用于基于 TLS 的 SMTP。我尝试反转到 WSS 的默认 TCP/443 端口,它有效。

我也尝试了不同的端口并得到了不同的结果。 无论端口是否标准化似乎都没有什么区别,我让它与一些标准化端口一起工作。

但是,除了 TCP/443 之外,我无法让任何用于 TLS 的端口与 WSS 配合使用(尝试过 993、995、465、563),所以我假设默认情况下使用 JS Websocket 客户端无法连接任何 TLS 相关端口,也许出于安全原因。

TL;DR:在端口 465 上连接不起作用,但默认端口(443)或备用端口(4443)工作得很好

© www.soinside.com 2019 - 2024. All rights reserved.