2014-09-19 89 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