【发布时间】:2017-01-02 12:03:28
【问题描述】:
我一直在尝试设置一个服务器,用户可以在其中使用 websockets 发送登录信息,但我不想使用 ws 执行此操作。我希望能够在没有 https 的情况下打开 wss。可悲的是,没有任何选择可以做到这一点。所以问题是如何在不使用 https 协议的情况下在客户端执行此操作。
【问题讨论】:
标签: javascript sockets security socket.io wss
我一直在尝试设置一个服务器,用户可以在其中使用 websockets 发送登录信息,但我不想使用 ws 执行此操作。我希望能够在没有 https 的情况下打开 wss。可悲的是,没有任何选择可以做到这一点。所以问题是如何在不使用 https 协议的情况下在客户端执行此操作。
【问题讨论】:
标签: javascript sockets security socket.io wss
是的,这是可能的。为此,请将您的 websocket URL 直接传递给 socket.io 客户端,如下所示:
var socket = io('wss://example.com/');
请注意,反过来是不可能的:虽然没有什么可以阻止 HTTP 页面创建 WSS 连接,但现在大多数浏览器都会阻止来自 HTTPS 页面的任何 WS 连接以增强安全性。
我还要提醒的是,通过 WSS 打开的 websocket 仍然不比它源自的页面更安全。如果您将 WSS 用于其安全优势,请注意,如果攻击者在加载页面时覆盖了您的页面(HTTPS 会阻止),那么所有安全性都可能化为乌有。
【讨论】:
来自Websocket protocol specification:
wssURI 标识 WebSocket 服务器和资源名称,以及 表示该连接上的流量将受到保护通过 TLS(包括 TLS 的标准优势,例如数据机密性 和完整性,以及端点身份验证)。
强调我的
现在你可以理解你的请求的荒谬了:wss is https。
当然,术语是错误的(https 是与 wss 不同的协议),但归根结底,两者都是各自 TCP 普通协议的版本(http 和 ws) 在TLS.
所以答案是否。
事实上,安全是一件复杂的事情。
非常有经验的程序员不会发明或探索新方法,并且根据您提出的问题,您似乎没有太多该领域的专业知识。
所以最好按照最佳实践所说的去做,他们说使用“https”使用“https”。
建议开始认真研究安全性(或聘请承包商),而不是发明执行安全身份验证的新方法,除非您拥有抽象代数博士学位和多年开发密码方案的经验。
【讨论】: