Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以强制socket.io使用wss而不是ws,而不必更改为https?_Javascript_Sockets_Security_Socket.io_Wss - Fatal编程技术网

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

Javascript 是否可以强制socket.io使用wss而不是ws,而不必更改为https?,javascript,sockets,security,socket.io,wss,Javascript,Sockets,Security,Socket.io,Wss,我一直在尝试设置一个服务器,用户可以使用WebSocket发送登录,但我不想使用ws。我希望能够在没有https的情况下打开wss。遗憾的是,没有任何选择可以做到这一点。所以问题是,如果不使用https协议,如何在客户端执行此操作。来自: wssURI标识WebSocket服务器和资源名称,以及 指示通过该连接的流量将通过受到保护 TLS(包括TLS的标准好处,如数据保密性 以及完整性和端点身份验证) 重点矿山 现在,您可以理解您的请求的荒谬性了:wssishttps. 当然,术语是错误的(ht

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

来自:

wss
URI标识WebSocket服务器和资源名称,以及 指示通过该连接的流量将通过受到保护 TLS(包括TLS的标准好处,如数据保密性 以及完整性和端点身份验证)

重点矿山

现在,您可以理解您的请求的荒谬性了:wssishttps.
当然,术语是错误的(https与wss是不同的协议),但归根结底,两者都只是各自的TCP普通协议(http和ws)的版本

所以答案是否定的


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

所以最好按照最佳实践的说法去做,如果他们说使用“https”或者“https”


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

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

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

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


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

不同意:虽然HTTPS和WSS密切相关,需要一起使用以获得其安全利益,理论上没有理由不可能只使用其中一个,事实上,我刚刚遇到了一个有用的用例(调试wss库可能导致的错误)。对于询问者的请求,我可以想象一个场景,其中http页面通过其他方式(即从localhost提供服务)得到保护。理解正在使用的加密算法很难,但理解站点的哪些部分受到或不受加密算法的保护非常简单。@Brilliand可能我们以不同的方式看到了这个问题,因为这里没有解释的余地:wss是https。因此,您必须设置整个https机器才能使用它。即使在您的答案中,您也在使用https。OP讨论的是设置服务器,而不是混合内容。嗯,这是一个合理的解释。但正如您所说,术语是错误的:https和wss是独立的,它们都依赖于SSL/TLS(这是最难的部分)。我假设他没有犯术语错误,但你可能是对的,他真正想要避免的是SSL证书。@Brilliand Yep,就是这样,我只是想跳过SSL证书。我决定切换到https。使用Firebase主机,这是一项很棒的服务,他们提供免费SSL证书。好吧,现在我有一个问题,我不知道该给谁答案,你的两个答案听起来都是对的,但我对这个主题的知识不足限制了我做出正确的选择。@KitangaNday我建议接受Margaret的答案,因为她回答了实际适用于您的情况的问题:如果没有SSL证书,您就不能拥有WSS。我的回答在技术上是正确的,但对您来说毫无用处。