web-dev-qa-db-ja.com

IE10のWebSocketでSecurityErrorが発生する

現在、JavaScriptのWebSocketを使用して、IE10(Windows 8)でWebサイトを開発しています。 Firefox 18およびChrome 25で正常に動作しますが、IE10では、接続を確立するとSecurityErrorが発生します。

私がやっていることはかなり難しいようです:

websocket = new WebSocket('wss://hello.dev.mydomain.net');

しかしIEは気に入らない:

SCRIPT5022: SecurityError 

スクリプトは「 https://test.dev.mydomain.net 」にあります(明らかに実際のアドレスではありません)。

気になるのは、ローカルコンピューター上のファイル(たとえば、file:// ...)をダブルクリックするだけで機能することです。さらに悪いことに、HTTPトラフィックを監視するためにfiddlerを使用すると...も機能します。 APIの仕様に詳述されているように、フィドラーがなければ接続はまったくないようです。 (下記参照。)

websocket spec で判断すると、例外はChrome/Firefoxにも表示されるはずですが、表示されません。したがって、HTTP/HTTPSに関連するものがあるとは思いません。いずれにせよ、httpsページでwsSソケットを使用しています...さらに、オンラインの例で見つかった別の有効なサーバーでwssアドレスを置き換えると、機能します。

これが関連するかどうかはわかりませんが、test.dev.mydomain.netからのIPは10.14.x.xで、hello.dev.mydomain.netは194.247.x.xです。 IEのみで何らかのセキュリティをトリガーできるかどうかわかりません...

もう1つ:* .dev.mydomain.netの証明書があります。IEに問題はないようです。スクリプトは元々my.name.devというサーバーにあります。 mydomain.netですが、別のURLからアクセスしているため(ある種の同一生成元ポリシーの問題である可能性があると最初に考えたため、リダイレクトされました)、どのように問題になるかわかりません。ではない...

どんなアイデアでも歓迎します。

編集:信頼済みゾーンへのサイトの追加も機能しません。

43
EldredB

さて、私の質問はそれほど成功しなかったので、見つけた「回避策」を投稿します。

194.247でWebサイトの別のアドレスを取得しました。もです。これは魔法のように解決しました。推測IEは、ローカルのものと外部のものを混合することを嫌い、IPを監視します。

とにかく、私はこれが同じ問題を抱えている人に役立つことを願っています。

IEを設定して「本当の」問題を解決する解決策があれば、教えてください:)

乾杯、

7
EldredB

ローカル(イントラネット)ドメインでWebSocketを開こうとすると、IEはSecurityErrorをスローしますこれを克服するために、ローカルサイトを認識するためのIEの自動アルゴリズムを無効にすることができます。これはTools > Internet Options > Security > Local Intranet > Sites

intranet detection settings

すべてのチェックボックスのチェックを外します(ドメインがイントラネットのチェックボックスにどのようになったか正確にわかっている場合は、特定のチェックボックスのみ)。

IEは(特に)プロキシ設定を使用してローカルサイトを決定します。ドメインがプロキシ設定でプロキシから除外されるようにリストされている場合、おそらくイントラネットとして扱われます。 Fiddlerを有効にするとWebSocketが機能する理由は、IEプロキシ設定を変更し、イントラネットサイトのリストが変更されるためです。

50
Georgii Ivankin

Windows 7/IE11でこの問題が発生しましたセキュリティパッチを適用した後。 Windows10/Edgeについても同じ話です。

これはローカルWebsocket(ws:// localhost)であるため、ws:\\localhost\からInternet Explorerの構成([ツール]> [インターネットオプション]> [セキュリティ]> [ローカルイントラネット]> [サイト]> [詳細])。

IE11 local intranet sites configuration

Windows 10/Microsoft Edgeでは、この設定はコントロールパネル>インターネットオプションにあります。

[〜#〜] update [〜#〜]

Webアプリのアドレス( https://test.dev.mydomain.net )もlocalイントラネットゾーンに追加する必要があります。 画像にwebappアドレスを追加する必要があることに注意してください。

8
lmiguelmh

ブラウザにはWebSocketの制限があります。たとえば、Internet Explorerには、Webソケット接続のデフォルト制限がホストヘッダー名ごとに6に設定されています。 WinForms WebBrowserコンポーネントにも同じ制限が設定されています。

解決策は、キーComputer - \ HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER の下に値を追加することです。 iexplore.exe(またはWebブラウザコンポーネントを使用している場合はアプリケーションの実行可能ファイル名)などの実行可能ファイル名でDWORD値を追加し、範囲2..128から値を設定するだけです

SecurityExceptionを解決する2番目のオプションは、複数のサブドメインを作成することです。

3
Rudolf Dvoracek

クライアントのホスト名/ IPアドレスは、リスンしているサーバーのIP /ホスト名と同じでなければなりません。そうしないと、上記のエラーが発生します。

1)サーバーのホスト名がIP/localhostなどでリッスンするように構成されているかどうかを確認し、ホスト名を明示的に指定しない場合はastサーバー

2)クライアントで同じホスト名を使用します。これで問題が解決します。それは私のために働いた...

1
Lokesh

上記の回答のように、インターネットゾーンがローカルホストではないことを確認することに加えて、httpsを使用する場合はwssを使用する必要があります。

これは他のブラウザでは問題になりませんが、IEは少し複雑です。

enter image description here

0
blackening

エラーが発生しました(SCRIPT5022の部分については言及していませんが、 "ScriptError"を報告しているだけです)。 「信頼済みサイト」をクリックしてから、リモートWebソケットをホストするマシンを追加することで問題を回避しました。信頼できるサイトに追加するには、

  • 「ws://」部分なしでアドレスを指定する必要がありました(mymahcine.mydomain.comなど)

  • 「サーバーの検証https://を要求する」オプションのボックスをオフにする必要がありました。

  • ドメインの追加が完了したら、[サーバーの確認(https://)が必要です。同じことを行うことをお勧めします。このボックスをオフにすると、次で始まるサイトを追加することはできません。 https(私の場合はむしろws://)
0
NurAlDin

お客様の環境の1つで同じ問題が発生しました。 WebSocketエンドポイントへの直接接続を許可せず、WebSocketプロトコルをサポートしないプロキシ構成があることが判明しました。一時的な解決策は、プロキシの使用を無効にして、すべてが機能し始めることでした。長期的な解決策は、プロキシの構成(.pacファイル)を編集して、WebSocketエンドポイントのアドレスを除外することです。

プロキシを無効にするには、Internet Explorerの[オプション]> [接続]タブ> [LAN設定]ボタンに移動し、[設定を自動的に検出する]をオフにします。

これが誰かを助けることを願っています。

0
DoronG