是否可以强制 socket.io 使用 wss 而不是 ws,而不必更改为 https?

Is it possible to force socket.io to use wss instead of ws, without having to change to https?

我一直在尝试设置一个服务器,用户可以在其中使用 websockets 发送登录信息,但我不想使用 ws 来执行此操作。我希望能够在没有 https 的情况下打开 wss。可悲的是,没有任何选择可以做到这一点。所以问题是如何在不使用 https 协议的情况下在客户端执行此操作。

来自Websocket protocol specification

A wss URI identifies a WebSocket server and resource name, and indicates that traffic over that connection is to be protected via TLS (including standard benefits of TLS such as data confidentiality and integrity, and endpoint authentication).

强调我的

现在您可以理解您的请求的荒谬之处了:wss is https.
当然术语是错误的(https 是与 wss 不同的协议)但最重要的是两者都只是他们的版本TLS.

上的相应 TCP 纯协议(httpws

所以答案是


事实上,安全是一件复杂的事情。
非常有经验的程序员不会发明或探索新方法,并且根据您提出的问题类型,您似乎不具备该领域的专业知识。

所以最好按照最佳实践所说的那样做,他们说使用“https”使用“https”。

建议开始认真研究安全性(或聘请承包商),发明新方法来执行安全身份验证则不然,除非您拥有抽象代数博士学位和多年开发密码方案的经验。

是的,这是可能的。为此,请将您的 websocket URL 直接传递给 socket.io 客户端,如下所示:

var socket = io('wss://example.com/');

请注意,反过来是不可能的:虽然没有什么可以阻止 HTTP 页面创建 WSS 连接,但当今大多数浏览器都会阻止来自 HTTPS 页面的任何 WS 连接以加强安全性。

我还要提醒您,通过 WSS 打开的 websocket 仍然不比它的来源页面更安全。如果您使用 WSS 是为了它的安全优势,请注意,如果攻击者在加载页面时覆盖您的页面(HTTPS 会阻止),那么所有安全性都可能化为乌有。