2014-12-13 38 views
0

我想獲得一個安全的Websocket行,當連接的兩端位於可變位置時。如何在客戶端和服務器位置均爲動態時通過TLS運行c#websockets?

什麼即時通訊做:我有

運行的WebSocket 服務器(斑點)C#程序,這個程序被部署到用戶的機器。 接下來,我有一個網站和一個Android應用程序運行Websocket 客戶端(分別在JavaScript和Java)。客戶端知道如何連接到服務器(通過php從數據庫中查詢)。

所以這種方式直接連接從客戶端到服務器,而不需要通過網站或任何東西,這主要是因爲它可以包含敏感信息,而不是網站必須觸及,這是一個巨大的優勢!該網站本身使用可信證書運行HTTPS。

c#Fleck服務器需要WSS的pfx證書,我試圖使用openSSL和我用於網站的證書。但是,當websocket證書不好時,瀏覽器會自動斷開連接。如果我去http s:// localhost:port我得到了預期的瀏覽器警告,說我的域與證書不匹配,同樣的錯誤可能是瀏覽器丟棄websocket連接的原因,因爲用戶的PC或他們連接的任何電腦/電話都使用該域名。

如果我上面的觀察是正確的,本質上我會需要像可信域的可信證書。這樣的事情存在嗎?

謝謝你的時間!

回答

1

如果我正確理解你的架構必須:

  • 一個WebSocket的服務器上的客戶端個人電腦,它通常位於後面裏面的一些私有網絡中的一些路由器/防火牆運行。
  • 不同地方的Websocket客戶端,特別是在Android應用程序和Web服務器中。這些WebSocket客戶端可能與WebSocket服務器位於同一本地網絡中,但也可能位於某個外部公共網絡內部或某個不同的專用網絡內部。

現在,您正試圖通過使用WSS(即通過TLS的Websockt)和Websocket服務器的一些證書來保護客戶端和服務器之間的通信。並且您想要爲所有Websocket端點使用相同的證書,並且它應該隨服務器應用程序一起提供。

這種設置會不會有幾個原因的工作:

  • 由於WebSocket的服務器是爲個人電腦,主要是裏面的一些內部局域網上它不會從外部訪問,除非用戶添加路由器或防火牆上的傳入連接的特定端口轉發規則。
  • 如果要爲所有服務器實例使用相同的證書,則不僅需要發送證書,還需要將匹配的私鑰與WebSocket服務器應用程序一起發送。這意味着任何人都可能提取證書和私鑰,並將其用於他們自己的假服務器或用於針對您的系統的中間人攻擊。

相反,這些問題的證書中的名稱其實並沒有太大的問題,因爲你可以簡單地使用certificate/public key pinning對這個固定的證書,而不是檢查證書鏈和主機名。但是,我認爲整個設計是有缺陷的。

除此之外,security.stackexchange.com可能是提問有關安全體系結構的更好地方。

1

沒有..有一個可變域將所有意圖和目的打破了「信任」的想法。如果任何人都可以使用您的證書...然後任何人可以使用您的證書。你的用戶是否知道你在他們的機器上設置了一個Web服務器?請記住..用戶必須打開防火牆到託管此Web服務器的服務器。

可能您的最佳選擇是設置您的客戶端代碼以忽略證書問題並繼續。

相關問題