web-dev-qa-db-ja.com

FirefoxでWebsocketの安全な接続を確立できません

Firefoxで立ち往生しています。 Websocketを動作させることができませんでした。 Tornado Websocketを使用し、以下のコードで初期化しました。

app = Application([(r'/mypath/ws', WSHandler)])
http_server = HTTPServer(app, ssl_options={
                "certfile": "~/certs/websocket.crt",
                "keyfile": "~/certs/websocket.key"
            })
http_server.listen("443")

そして、私はそれを次のようにJavascript側で初期化しました:

var WS = new WebSocket("wss://websocket.localhost/mypath/ws");

このコードはChromeで正常に機能しますが、自分で証明書を作成し、HTTPSでページを実行しました。しかし、Firefoxは次のように言い続けています。

Firefox can't establish a connection to the server at wss://websocket.localhost/mypath/ws.

私はそれをグーグルで検索し、あまりにも多くの考えを見つけましたが、どれも私のために働きませんでした:(

どんな助けでもありがたいです。

9
Fatih Karatana

ProxyPassを介して問題を解決しました。 Tornadoを使用して安全でないWebsocketサーバーを作成し、3232などの特定のポートで実行しました。

app = Application([(r'/ws/', WSHandler)])
ws_server = HTTPServer(app)
ws_server.listen("3232")

次に、Apache confにプロキシパスを記述し、mod_proxy_wstunnelを使用します。

ProxyPass /ws/ ws://127.0.0.1:3232/ws/
ProxyPassReverse /ws/ ws://127.0.0.1:3232/ws/

そして、私は次のようにフロントエンドでWebsocketクライアントを作成します。

var WS = new WebSocket("wss://websocket.localhost:81/ws/")

この場合、httpsを使用した安全な接続で接続を作成でき、ポートは81で、プロキシパスはWebsocketリクエストをローカルでリッスンされたポート3232にリダイレクトします。これはほとんど回避策のような正確なソリューションではありません。しかし、それは私にとってはうまくいきます。

0
Fatih Karatana

自己署名証明書の場合、WebSocketでのみ使用されていると、ブラウザーは証明書を受け入れるためのダイアログを表示しません。最初に同じサーバー上の通常のページにアクセスして証明書の警告を表示して受け入れる必要があります。その後、安全なWebSocketを作成できます。

6
Ben Darnell

このURLをFirefoxで https://websocket.localhost/mypath/ws 開いて、最初に証明書を受け入れてみてください。

1
l0pan

私はしばらくの間、これの上に髪を引っ張っていました。さまざまなWebブラウザーに応じて、あらゆる種類の不可解なエラーメッセージが表示されていたため、証明書の例外に関するもののように聞こえました。 FirefoxとChromeではすでに例外を作成していました。

Javascriptのサブプロトコル文字列にタイプミスがあることが判明しました!

サブプロトコル文字列を修正すると、すべてが改善されました。 WebSocketとサブプロトコルの使用に関する詳細情報: https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

0
Tarocco

Firefoxの詳細設定に証明書の例外を追加して、この問題を解決しました。

0
francadaval

自己署名証明書の場合、WebSocketでのみ使用されていると、ブラウザーは証明書を受け入れるためのダイアログを表示しません。
最初に要求されたURLにアクセスして証明書の警告を確認して受け入れる必要があります。その後、安全なWebSocketを作成できます。

たとえば、WebSocketのURLが次の場合:
wss:// localhost:44300/OpenWebSocket
次にアクセス:
https:// localhost:44300/OpenWebSocket
そして証明書の警告を受け入れる

0
Mehdi