SSLを使用したWebSocket


115

HTTPSでWebSocketを使用することは可能ですか?

HTTPSに切り替えると、WebSocketがセキュリティエラーを返し、通常のHTTPで完全に動作します。

以下はスニペットです。

socket = new WebSocket("ws://my_www:1235"); 

私の悪いことに、使用しているAIRソケットサーバーは安全ではないことに気付きました。flash.net.SecureSocketを使用するように書き換える必要があります...
Eric

回答:


170

WebSocket接続は、HTTPまたはHTTPSハンドシェイクから始まります。HTTPを介してページにアクセスする場合、WSまたはWSS(WebSocketセキュア:WS over TLS)を使用できます。ただし、ページがHTTPS経由で読み込まれる場合は、WSSのみを使用できます。ブラウザはセキュリティの「ダウングレード」を許可していません。


それは私が持っているものですが、使用しているAIRソケットサーバーは安全ではないことに気付きました。flash.net.SecureSocketを使用するように書き換える必要があります...
Eric

Flashにも深刻な問題があります... WebSocketサーバーを構築していますか(そうであれば、その理由)、またはアプリを構築していますか?
Peter Moskovits 2012年

1
はい、AIRソケットサーバーを実行しています。
エリック

では、ページにHTTPがロードされていない場合にWSSを選択するにはどうすればよいですか?
anatly techtonik 14

29

HTTPS経由でWebSocketsを使用することはできませんが、TLS経由でWebSocketsを使用することはできます(HTTPSはHTTP over TLSです)。URIで「wss://」を使用するだけです。

最近のバージョンのFirefoxではHTTPSページから非TLS WebSocketを使用できないと思いますが、その逆は問題になりません。


それで、解決策は何ですか?私はWSサーバーをhttpで実行していますが、SSLを購入しましたが、ブラウザでWSに接続できなくなりました。私はWSをWSS://に変更しましたが、WebSocketに接続していません
muaaz

@muaaz WebSocketサーバーはWSSモードで実行されている必要があり、WebSocketサーバーに接続しようとしている元のWebページにサービスを提供しているWebサーバーと同じSSL証明書/キーをロードすることが望ましいです。
カナカ

4
ありがとうございました。ところで、からのリクエストをプロキシ(apacheを使用)することで解決しましwss://ws://。したがって、私はwss://ws.domain.comapache を使用してプロキシを適用し、WSサーバーが実行されている場所にリクエストをリダイレクトします。例:ws://10.12.23.45:5641/server.php。そして私はそれが非常に悪い解決策であることを知っています-しかし、それは私にとってはうまくいきます。あなたがApacheの設定を案内してくれるなら、あなたの助けに感謝します。例:どこに置くか.certなど。
muaaz 2016年

@muaaz申し訳ありませんが、自分でグーグルする以外は、apacheの構成を知りません。
カナカ

21

1つの追加の警告(カナカ/ピーターによる回答のほか):WSSを使用していて、サーバー証明書がブラウザーに受け入れられない場合、ブラウザーで表示されるダイアログが表示されない可能性があります(Webページで発生するように)。これは、WebSocketがいわゆる「サブリソース」として扱われ、証明書が/セキュリティ例外/サブリソースに対してレンダリングされないダイアログを受け入れるためです。


HTTPSで使用されているものと同じ証明書であっても?
vekah 2015

1
「ブラウザ表示ダイアログ」とはどういう意味ですか?好きalert()
Ivan Perevezentsev 2016年

2
ブラウザー(ページではない)内でネイティブに発生するダイアログ。「この証明書は無効です。続行しますか?」のように
oberstet

これを克服する方法はありますか?自己署名証明書を使用している場合でも、websocketを使用できますか?
OhadR
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.