web-dev-qa-db-ja.com

wsとwssの違いは?

Wsをwssに変更する手順は何ですか?

Wssが通常のHTTPを介してアップグレードするのか、wssがHTTPSのみで機能するのか

webSocket = new WebSocket("ws://localhost:port/Esv/ocp");

wsをwssに変更すると、正常に動作します

webSocket = new WebSocket("wss://localhost:port/Esv/ocp");

次のエラーが表示されます。

接続確立のエラー:net :: ERR_SSL_PROTOCOL_ERROR

25
mahe

短縮版

SSLを使用するかしないか

SSL証明書の問題 が発生している可能性があります。接続ポイントルールは、 要約

  • wss接続オンhttps only
  • ws接続オンhttp

andその逆:

  • httpsは受け入れますwss only
  • httpは受け入れますws only

エラー

次の状況では、エラーが発生します(Firefoxでのテスト):

  • wss接続をhttpエンドポイントに接続する場合。私のテストでは、

    InvalidStateError:使用できない、または使用できなくなったオブジェクトを使用しようとしました

  • ws接続をhttpsエンドポイントに接続する場合、エラーが発生します

    SecurityError:操作は安全ではありません。

正式な回答

WebsocketのバイブルはRFC 6455です。セクションで 4.1.5

/ secure /が真の場合、クライアントは接続を開いてからハンドシェイクデータ[RFC2818]を送信する前に、接続上でTLSハンドシェイクを実行する必要があります。これが失敗した場合(たとえば、サーバーの証明書を検証できなかった場合)、クライアントはWebSocket接続に失敗しますにして、接続を中止する必要があります。そうでない場合、このチャネルでのそれ以降のすべての通信は、暗号化されたトンネル[RFC5246]を介して実行されなければなりません。

secureフラグはURIによって定義されます。セクション3はsecureとは何かを定義します

スキームコンポーネントが大文字と小文字を区別せずに「wss」に一致する場合、URIは「セキュア」と呼ばれます(「セキュアフラグが設定されている」と言われます)。


TL; DR

wssを使用する場合:

  • sSLを有効にする必要があります
  • エンドポイントポイントを保護する必要があります(https://...):「セキュリティダウングレード」は許可されていません

wsを使用する場合:

  • エンドポイントでSSLが有効になっていないことを確認してください(http://...
40
Al-un