2016-07-22 75 views
0

我們是完全被卡住並會喜歡從別人誰在WSS工作,知道一些雲基礎設施的幫助。的WebSocket服務器沒有得到當WS握手://改爲WSS://

我們在類似this風格構建了一個定製的WebSocket服務器。服務器在端口45001上的Azure虛擬機上運行。客戶端是我們的網站(HTML/Javascript)。 websocket uri是'ws:// endpointname:45001'服務器將獲得握手請求併發送適當的響應並建立連接。客戶和服務器每次都愉快地交流!

我們安裝在那裏我們的網站是在Azure上託管SSL證書的那一刻,瀏覽器要求我們轉換WS調用WSS://。通過這樣做,到達服務器端口的第一條消息就是HTTP升級請求,現在是服務器無法理解的一些加密消息!

​​

任何想法,爲什麼服務器虛擬機是沒有得到一個HTTP升級請求?

的事情,我們嘗試:

  1. 安裝在VM中的端口45001的證書。沒有運氣。不知道虛擬機甚至不知道如何使用此證書解密。
  2. 在本地運行服務器並讓瀏覽器通過wss連接。服務器仍然有奇怪的加密消息。在當地environnment,在什麼基礎上呢

真的很感激,如果有人可以提供幫助。!

回答

0

HTTP和HTTPS通常用於在不同的端口(80和443在默認情況下,分別地)。 Secure WebSocket客戶端必須先連接到服務器並建立HTTPS會話,然後才能發送正常的WS升級請求。

如果您嘗試在同一端口上運行HTTP和HTTPS,大多數服務器將無法正確處理,除非它們專門用於查看新連接的前幾個字節以確定是否正在使用HTTPS。通常使用單獨的端口更容易,一個專用於HTTP,另一個專用於HTTPS。

就您而言,聽起來您的WSS客戶端仍然連接到不安全的WS端口,因此服務器將看到HTTPS加密握手而不是未加密的HTTP請求。 HTTPS握手是一種二進制協議,而不是文本,因此如果您嘗試將其視爲文本,它看起來就像是胡言亂語。

端口45001不是標準的HTTP/S端口,因此您必須在您的ws://wss://網址中明確指定端口。您需要更新wss://網址以使用服務器已配置爲支持HTTPS的端口。

+0

謝謝!我編輯了我的帖子,澄清我們在url中指定了端口號。你能回答1)在ws://模型中,我們只是簡單地迴應客戶端收到端口上的第一條消息,這是一個升級請求,同意升級並提供其他必要的東西。現在我們正在通過wss接收消息,這是否意味着我們需要發回消息並以編程方式進行握手? 2)證書安裝在VM端口上。這足以讓服務器自己進行握手,然後我們得到升級請求嗎? – TkNeo

+0

請閱讀有關如何啓用HTTPS的Azure文檔([爲Azure中的應用程序配置SSL](https://azure.microsoft.com/zh-cn/documentation/articles/cloud-services-configure-ssl-certificate/)和[爲Azure應用服務中的應用啓用HTTPS](https://azure.microsoft。com/en-us/documentation/articles/web-sites-configure-ssl-certificate /)),另請參閱[如何在Azure虛擬機中設置Web服務器](https://www.nimbo.com/博客/如何到設置-AN-Azure的虛擬機作爲一種Web服務器/)。 –

+0

您嚮應用服務添加證書的第二個鏈接(我們的前端應用程序-HTML),我們已經實現了它。 您的第一個鏈接適用於沒有虛擬機的經典雲服務。由於我們有一個虛擬機,它不適用於我們。請參閱http://serverfault.com/questions/722796/install-ssl-certificate-on-azure-cloud-service-vm我們按照[這裏]所述向VM添加了證書(https://msdn.microsoft.com/zh-cn/ -us /庫/ ms733791(v = vs.110)的.aspx)。關於爲VM配置VM的第三個鏈接也是[實施](http://take.ms/ohCft)。有什麼想法做什麼? – TkNeo