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

Kit*_*day 2 javascript sockets security wss socket.io

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

Mar*_*oom 5

Websocket 协议规范

一个wssURI标识的WebSocket服务器和资源名称,并指示业务通过该连接要保护通过TLS(包括TLS标准的好处,比如数据的机密性和完整性,以及端点认证)。

强调我的

现在您可以理解您的请求的荒谬之处了:wss https
当然,术语是错误的(https是与wss不同的协议),但归根结底,两者都只是基于TLS的各自 TCP 纯协议(httpws)的版本。

所以答案是否定的


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

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

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

  • 不同意:虽然 https 和 wss 密切相关,需要一起使用才能获得安全优势,但理论上没有理由不能只使用一个或另一个,实际上我只是遇到了一个用例哪里有用(调试可能由 wss 库引起的错误)。对于提问者的请求,我可以想象通过其他方式(即从本地主机提供服务)保护 http 页面的场景。了解正在使用的加密算法很难,但了解您网站的哪些部分受到或不受到保护则非常简单。 (2认同)
  • 嗯,这是一个合理的解释。但正如您所说,术语是错误的:*https* 和 *wss* 是不同的东西,它们都依赖于 SSL/TLS(这是困难的部分)。我认为他没有犯任何术语错误,但你可能是对的,他真正想避免的是 SSL 证书。 (2认同)
  • @Brilliand 是的,就是这样,我只是想跳过 SSL 证书。我决定只切换到https。使用 Firebase 主机,这是一项很棒的服务,他们提供免费的 SSL 证书。 (2认同)

Bri*_*and 5

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

var socket = io('wss://example.com/');
Run Code Online (Sandbox Code Playgroud)

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

我还要提醒您,通过WSS打开的Websocket仍然不比其起源页面安全。如果将WSS用于安全性方面,请注意,如果攻击者在加载页面时覆盖了您的页面(HTTPS会阻止),那么所有这些安全性都将一无所获。

  • @KitangaNday我建议接受Margaret的回答,因为她回答了实际适用于您的情况的问题:没有SSL证书就无法拥有WSS。我的回答在技术上是正确的,但对您毫无用处。 (2认同)