web-dev-qa-db-ja.com

WebSocket接続は、Chrome SSLなしで失敗します

標準のWebページとTomcat v7.0.62サーバーの間にWebSocketを設定しています。 Firefox、Edge、およびIE11でTomcat SSLのオン/オフを切り替えても、接続は正常に機能します。ただし、Chrome(v66.03)では、websocketはサーバーでSSLをオンにしてhttps経由で接続した場合にのみ接続します。Chromeでは、サーバーでSSLをオフにしてHTTP経由で接続しようとすると、エラーがスローされます。

TomcatでSSLを無効にしてHTTP経由で接続しようとすると、エラーChromeがスローされます...

Error in connection establishment: net::ERR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION

クライアント上のWebSocket接続コードは次のとおりです...

var wss = "wss://";
if (document.location.protocol === "http:") {
   wss = "ws://";
}
var wsURL = wss + document.location.Host + "/status?sessionId=<%=session.getId()%>";

これは何かChrome=非https websocket接続で特別なコードが必要ですか?

10
bluedevil2k

これはChrome固有の動作です。 Chromeは、localhostへの安全でないwebsocket(ws)接続を許可しません(wssのみです。したがって、ローカルweb/websocketサーバーのTLS証明書を設定する必要があります)。しかし、Firefoxや他のブラウザーでも問題なく動作します。

この問題に関するChromiumのChromeバグレポートを参照してください。この特定の問題は意図的なものであり、ローカルネットワークでリッスンしている内部ネットワークデバイスおよびプロセスに対する攻撃を防ぐことにより、Chromeをより安全にするためにこの変更を行いました。

https://bugs.chromium.org/p/chromium/issues/detail?id=378566

問題を確認できません。ここでエコーテストを試すことができます: http://www.websocket.org/echo.html

Webサイトはhttpとhttpsをサポートしています。ws://echo.websocket.orgおよびwss://echo.websocket.org。私はすべての組み合わせを試しましたが、すべてうまくいきました。

私の推測では、それはサーバーの設定の問題か、ブラウザの拡張機能の問題です。

1
Forivin
Error in connection establishment: net::ERR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION

クライアントとサービスの間の中間に認証があるプロキシを持っているようです。プロキシとクライアントの構成によっては、SSL接続を許可する場合がありますが、プレーンHTTPはフィルタリングされます。

0
Leo