2016-07-22 4 views
0

WSSに取り組み、クラウドインフラストラクチャを知っている人の助けを借りて、ws://がwss://に変更されたときにWebSocketサーバーがハンドシェイクを取得しない

thisと同様のスタイルでカスタムwebsocketサーバーを構築しました。サーバーはAzureのポート45001のVM上で実行されます。クライアントは当社のWebサイト(HTML/Javascript)です。 websocket uriは 'ws:// endpointname:45001'です。サーバーはハンドシェイク要求を受け取り、適切な応答を送信し、接続が確立されました。クライアントとサーバーは、毎回楽しく通信しました!

私たちのウェブサイトがAzureでホストされているSSL証明書をインストールした瞬間、ブラウザはws:ws://を変換するよう依頼しました。これを行うと、HTTPアップグレード要求であったサーバーポートに当たっていた最初のメッセージが、サーバーが意味をなさない暗号化されたメッセージになりました。

​​

サーバーVMがHTTPアップグレード要求を取得していない理由はありますか。私たちが試した

もの:

  1. は、VMのポート45001上で証明書をインストール。運がない。 VMがこの証明書を復号化するのをどのように知っているかはわかりません。
  2. サーバをローカルに配置し、ブラウザにwss経由で接続させます。サーバーはまだ奇妙な暗号化されたメッセージを持っています。地元の環境では、どのような基準で

誰かが助けることができたら本当に感謝します。

答えて

0

通常、HTTPとHTTPSは異なるポート(それぞれデフォルトで80と443)で使用されます。 Secure WebSocketクライアントは、通常のWSアップグレード要求を送信する前に、サーバーに接続してHTTPSセッションを確立する必要があります。

同じポートでHTTPとHTTPSを実行しようとすると、HTTPSが使用されているかどうかを判断するために新しい接続の最初の数バイトを調べるように特別に設計されていない限り、 HTTPに専用のポートとHTTPS専用のポートを別々に使用する方が簡単です。

WSSクライアントがセキュリティ保護されていないWSポートに接続しているようで、暗号化されていないHTTP要求ではなくHTTPS暗号化ハンドシェイクがサーバーに表示されるようです。 HTTPSハンドシェイクはテキストではなくバイナリプロトコルであるため、テキストとして表示しようとするとぎこちないように見えます。

ポート45001は標準のHTTP/Sポートではないため、ws://wss://のURLに明示的に指定する必要があります。サーバがHTTPSをサポートするように設定されているポートを使用するように、wss://のURLを更新する必要があります。

+0

ありがとうございます!私は私の記事を編集して、URLにポート番号を指定していることを明確にしました。あなたは答えることができますか?1)ws://モデルでは、アップグレード要求であってアップグレードに同意し、他の必要なものを提供することで、ポート上で1番目のメッセージを受信したときにクライアントに返答していました。 wss経由でメッセージを受け取ったので、メッセージを返信してプログラムでハンドシェークを行う必要がありますか? 2)証明書がVMポートにインストールされている。それはサーバーがハンドシェイクを行うのに十分なのですか?それでは、アップグレードリクエストを受け取りますか? – TkNeo

+0

HTTPSを有効にする方法については、Azureのドキュメントを参照してください([AzureでのアプリケーションのSSLの設定](https://azure.microsoft.com/en-us/documentation/articles/cloud-services-configure-ssl-certificate/) [Azure App ServiceでアプリケーションのHTTPSを有効にする](https://azure.microsoft。「Azure仮想マシンでWebサーバーを設定する方法」(https://www.nimbo.com/)を参照してください。ブログ/セットアップ方法 - アジュール - 仮想マシン - として - Webサーバー/)。 –

+0

アプリサービス(Googleのフロントエンドアプリ - HTML)に証明書を追加するための2つ目のリンクで、これを実装しました。 最初のリンクは古典的なクラウドサービスのためのもので、VMはありません。私たちにはVMがあるので、私たちには当てはまりません。 http://serverfault.com/questions/722796/install-ssl-certificate-on-azure-cloud-service-vmを参照してください。ここに説明されているように、certにVMを追加しました(https://msdn.microsoft.com/en)。 -us/library/ms733791(v = vs.110).aspx)。 VMをHTTPS用に設定することに関する3番目のリンクも[実装されています](http://take.ms/ohCft)。何をすべきかについてのアイデア? – TkNeo

関連する問題