webentwicklung-frage-antwort-db.com.de

WebSocket auf IE10 gibt einen SecurityError aus

Ich entwickle derzeit eine Website unter IE10 (unter Windows 8), wobei WebSockets in JavaScript verwendet wird. Es läuft gut unter Firefox 18 und Chrome 25, aber auf IE10 bekomme ich einen SecurityError, wenn ich die Verbindung aufbaue.

Was ich mache, scheint ziemlich nach vorne zu schauen:

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

Aber IE mag es nicht:

SCRIPT5022: SecurityError 

Das Skript befindet sich auf " https://test.dev.mydomain.net " (offensichtlich nicht die tatsächliche Adresse).

Was mich stört, ist, dass wenn ich die Datei auf meinem lokalen Computer (z. B. Datei: // ...) einfach doppelklicke, sie einfach funktioniert. Schlimmer noch: Wenn ich fiddler zur Überwachung des HTTP-Datenverkehrs verwende ... dann funktioniert auch. Ohne Fiddler scheint es überhaupt keine Verbindung zu geben, wie in den Spezifikationen der API beschrieben. (Siehe unten.)

Gemessen nach websocket spec sollte die Ausnahme auch auf Chrome/Firefox erscheinen ... aber nicht. Ich bezweifle, dass es irgendetwas mit HTTP/HTTPS zu tun hat. In jedem Fall verwende ich einen wsS-Socket auf einer httpS-Seite ... Außerdem: Wenn ich die wss-Adresse durch einen anderen gültigen Server in einem Online-Beispiel ersetze, funktioniert es.

Ich weiß nicht, ob dies relevant ist, aber die IP von test.dev.mydomain.net lautet 10.14.x.x, wobei hello.dev.mydomain.net 194.247.x.x lautet. Ich weiß nicht, ob es nur bei IE irgendeine Art von Sicherheit auslösen könnte ...

Noch etwas: Ich habe ein Zertifikat für * .dev.mydomain.net, IE scheint keine Probleme damit zu haben. Das Skript befindet sich ursprünglich auf einem Server namens my.name.dev.mydomain.net, aber da ich von einer anderen URL aus auf das Skript zugegriffen habe (ich habe eine Weiterleitung erhalten, da wir dachten, es könnte sich um ein Problem mit der gleichen Ursprungsrichtlinie handeln), habe ich sehe nicht, wie es wichtig sein könnte. Zumindest hoffe ich es nicht ...

Jede Idee wird begrüßt.

BEARBEITEN: Das Hinzufügen der Sites zur vertrauenswürdigen Zone funktioniert ebenfalls nicht.

38
EldredB

Nun, meine Frage war nicht so erfolgreich, deshalb werde ich die "Workaround" posten, die ich gefunden habe.

Ich habe eine andere Adresse für die Website in 194.247. erhalten. auch. Das hat es auf magische Weise gelöst. Vermutung IE mag es nicht, lokales und externes Zeug zu mischen, und beobachtet die IP.

Jedenfalls hoffe ich, dass dies für jeden nützlich sein kann, der das gleiche Problem hat.

Wenn Sie eine Lösung haben, um das "echte" Problem durch Konfigurieren des IE zu lösen, lassen Sie es mich wissen :)

Prost,

6
EldredB

Es sieht so aus, als würde IE einen SecurityError auslösen, wenn Sie versuchen, einen Websocket in einer local (Intranet) - Domäne zu öffnen. Um dies zu umgehen, können Sie den automatischen Algorithmus des IE für die Erkennung lokaler Standorte deaktivieren. Dies kann in Tools > Internet Options > Security > Local Intranet > Sites erfolgen.

intranet detection settings

Deaktivieren Sie alle Kontrollkästchen (oder nur ein bestimmtes, wenn Sie wissen, wie genau Ihre Domäne in Intranet-Domänen gelandet ist). 

Beachten Sie, dass IE (unter anderem) seine Proxy-Einstellungen verwendet, um lokale Sites zu ermitteln: Wenn Ihre Domäne in den Proxy-Einstellungen als vom Proxy ausgeschlossen ausgeschlossen wird, wird sie wahrscheinlich als Intranet-Domäne behandelt. Aus diesem Grund funktionieren WebSockets, wenn Sie Fiddler aktivieren: Dadurch werden die Proxyeinstellungen IE und somit die Liste der Intranetsites geändert.

47
Georgii Ivankin

Ich hatte dieses Problem in Windows7/IE11 after beim Anwenden eines Sicherheitspatches. Für Windows10/Edge ist die gleiche Geschichte. 

Da es sich um ein lokales Websocket (ws: // localhost) handelt, müssen Sie ws:\\localhost\ zu den Internet Explorer-Konfigurationen hinzufügen (Extras> Internetoptionen> Sicherheit> Lokales Intranet> Sites> Erweitert). 

 IE11 local intranet sites configuration

In Windows 10/Microsoft Edge finden Sie diese Konfiguration unter Systemsteuerung> Internetoptionen.

UPDATE

Die Adresse Ihrer Web-App ( https://test.dev.mydomain.net ) muss ebenfalls zur Local Intranet Zone hinzugefügt werden. Hinweis, dass die Webapp-Adresse im Bild hinzugefügt werden soll.

5
lmiguelmh

Der Client-Hostname/die IP-Adresse sollte mit der Server-IP/dem Hostnamen identisch sein, auf die der Server wartet, andernfalls würden Sie den obigen Fehler erhalten.

1) Stellen Sie sicher, dass der Hostname des Servers so konfiguriert ist, dass er auf IP/localhost usw. wartet, und geben Sie den Hostnamen ast server nicht explizit an

2) Verwenden Sie denselben Hostnamen im Client. Dies löst das Problem. Es hat für mich funktioniert ...

1
Lokesh

Browser hat eine Einschränkung für das Websocket. Für Internet Explorer ist beispielsweise das Standardlimit für Websocket-Verbindungen auf 6 pro Host-Headernamen festgelegt. Die gleiche Einschränkung gilt für die WinForms WebBrowser-Komponente.

Die Lösung besteht darin, Werte unter Schlüssel Computer \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER in der Registrierung hinzuzufügen. Fügen Sie einfach den DWORD-Wert mit dem Namen der ausführbaren Datei hinzu, z. B. iexplore.exe (oder den Namen der ausführbaren Anwendung Ihrer Anwendung, wenn Sie eine Web-Browser-Komponente verwenden), und legen Sie den Wert aus dem Bereich 2..128 fest

Die zweite Option zur Lösung von SecurityException besteht im Erstellen mehrerer Unterdomänen.

1
Rudolf Dvoracek

Stellen Sie nicht nur sicher, dass die Internetzone kein Localhost ist (wie in den obigen Antworten angegeben), sondern stellen Sie auch sicher, dass wss verwendet wird, wenn https verwendet wird.

Dies ist kein Problem in anderen Browsern, aber IE ist etwas wählerischer.

enter image description here

0
blackening

Ich bin auf den Fehler gestoßen (obwohl er nicht den SCRIPT5022-Teil gesagt hat, sondern nur "ScriptError"). Ich bin um das Problem herumgekommen, indem ich auf "Vertrauenswürdige Sites" geklickt und dann den Rechner hinzugefügt habe, auf dem sich der Remote-Websocket befindet. Hinweis, um vertrauenswürdige Sites hinzuzufügen,

  • Ich musste die Adresse ohne den "ws: //" Teil angeben (wie zB nur mymahcine.mydomain.com)

  • Ich musste das Kästchen mit der Option "Serverüberprüfung https: //" deaktivieren.

  • Nach dem Hinzufügen der Domäne habe ich das Kontrollkästchen "Serverüberprüfung (https: //) erforderlich" erneut aktiviert. Ich würde jedem empfehlen, dasselbe zu tun. Das Deaktivieren des Kontrollkästchens ist nur eine Problemumgehung, um Websites hinzuzufügen, die nicht mit beginnen https (eher ws: // in meinem Fall)
0
NurAlDin

Ich hatte das gleiche Problem in einer Umgebung meines Kunden .. Es stellte sich heraus, dass sie eine Proxy-Konfiguration hatten, die keine direkte Verbindung zum WebSocket-Endpunkt zuließ und das WebSocket-Protokoll nicht unterstützte mit dem Proxy deaktivieren und alles begann zu arbeiten. Die langfristige Lösung besteht darin, die Konfiguration des Proxys (.pac-Datei) so zu bearbeiten, dass die Adresse des WebSocket-Endpunkts ausgeschlossen wird.

Um den Proxy zu deaktivieren, gehen Sie zu: Internet Explorer-Optionen> Registerkarte Verbindungen> Schaltfläche LAN-Einstellungen> Deaktivieren Sie die Option Einstellungen automatisch erkennen.

Hoffe das hilft jemandem.

0
DoronG