Websockets和安全性

时间:2014-09-19 15:57:08

标签: jquery security websocket libwebsockets

我希望托管一些基于websocket的应用程序,这些应用程序只能通过https页面访问。因此,服务器生成带有随机密钥的https页面。我希望使用此密钥来防止外部人员间接访问websockets。

我可以让每个Web套接字客户端将密钥发送到websocket服务器,如果密钥不匹配则关闭连接。但是,我更希望更新websockets本身以传递密钥,并在密钥不匹配时自动拒绝连接。 (这样,如果引入新的应用程序,就不会忘记执行检查)。

我环顾四周,并没有找到有关websockets如何工作的深入文档。

wss连接的初始握手是否以明文形式发送(如果我将密钥附加到那些数据包,中间人可以拦截它们吗?)。如果没有,是否有一种标准的方式在连接上发送这种元数据,或者我应该只修改websocket源文件?

我在服务器端使用libwebsockets,在客户端使用jquery.websockets。

1 个答案:

答案 0 :(得分:1)

Secure WebSocket连接仅升级after the secure connection is established

  
      
  1. 如果/ secure /为true,客户端必须执行TLS握手      打开连接后和发送前的连接      握手数据[RFC2818]。如果失败(例如服务器的话)      证书无法验证),然后客户端必须失败      WebSocket连接并中止连接。除此以外,      这个频道上的所有进一步沟通必须通过      加密隧道[RFC5246]。

         

    客户端必须在TLS中使用服务器名称指示扩展      握手[RFC6066]。

  2.   

RFC 6455, page 17

在客户端,浏览器提供WebSocket接口 - 当您到达onopen事件时,握手已经完成。您可以将密钥放在protocol中,但这肯定是一个黑客攻击(因为protocol旨在用于实际注册的协议,而不是身份验证机制。)

另一种方法是将WebSocket包装在您自己的库中,该库处理第一条消息上的密钥交换,以便您的应用程序层不必担心细节。