2014-09-19 87 views
0

我正在寻找一些基于websocket的应用程序,它只能通过https页面访问。因此,服务器使用一个随机密钥生成https页面。我想使用这个密钥来防止外部的人间接访问websockets。Websockets和安全

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

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

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

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

回答

1

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

  • 如果/安全/为真,则客户端必须超过 执行TLS握手打开连接后的连接并在发送 握手数据[RFC2818]之前。如果失败(例如,服务器的 证书无法验证),则客户端必须失败 WebSocket连接并中止连接。否则, 此通道上的所有进一步通信必须通过 加密通道[RFC5246]运行。

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

  • RFC 6455, page 17

    WebSocket接口是由浏览器提供的客户端 - 的时候你到了onopen事件握手已经完成。您可以将密钥放在protocol中,但这绝对是一个黑客(因为是用于实际注册的协议,而不是认证机制)。

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

    +0

    谢谢,我会添加一个要求,即我们的所有应用程序都需要密钥才会在交换任何其他消息之前进行检查。 – John 2014-09-19 19:33:07