[JavaScript] suche Framework für secure Websocket Client im Internet Explorer bzw. Edge

websocket
internet-explorer
edge
angular-js

#1

Hallo zusammen,

folgendes Szenario:
Wir haben eine Web-Anwendung mittels AngularJS erstellt. Die Daten werden als JSON mittels OData-Services geladen.
Mittels WebSockets kommuniziert die Web-Anwendung zusätzlich mit einem Programm, das lokal auf dem Client-Rechner läuft. Und dieses lokale Programm wiederum nutzt den WebSocket um sich bestimmten Daten direkt aus dem SAP zu holen.
Der WebSocket selber wird im SAP geöffnet, Web-Anwendung und lokales Programm verbinden sich auf diesen.

Um eine gewisse Sicherheitsstufe einzuhalten ist dieser WebSocket gesichert und fordert Client-Zertifikate. Der WebSocket-Server hat ein vertrauenswürdiges Zertifikat und der Client im Normalfall auch.

Der Verbindungsaufbau der web-Anwendung als WebSocket-Client ist analog zu diesem Tutorial umgesetzt.
https://tutorialedge.net/typescript/angular/angular-websockets-tutorial/

Problem:
Im Firefox läuft das alles ohne Probleme. Web-Anwendung lädt sich Daten, verbindet sich mit dem WebSocket und bittet den User, ein Zertifikat zur Anmeldung an den WebSocket zu wählen bzw. zu bestätigen.

im Internet Explorer lädt sich die Web-Anwendung die Daten, versucht siich mit dem WebSocket zu verbinden und scheitert. Meldung in der Entwicklerkonsole: WebSocket Error: Network Error 12044, Für die Clientauthenfizierung ist ein Zertifikat erforderlich.


Ich habe schon ein bisschen rum geschaut und erfahren, dass das ein Problem vom Internet Explorer ist. Laut Kollegen soll es wohl JavaScript Frameworks geben, die helfen dieses Problem zu lösen nur kann sich keiner an einen Namen erinnern.

Bei der Suche bin ich schon auf Socket.IO gestoßen, mich irrritiert aber das in deren Doku steht:

Socket.IO is NOT a WebSocket implementation.

Hat jemand von euch vielleicht eine Vorschlag für ein passendes Framework?


#2

Wikipedia ist zu Socket.io recht eindeutig:

Im Speziellen der Teil unter Überblick:

Seine Protokollaushandlungsteile sorgen dafür, dass ein Client, der Standard-WebSocket unterstützt, nicht in der Lage ist, sich mit einem Socket.IO-Server zu verbinden. Und ein Socket.IO-implementierender Client kann nicht mit einem nicht-Socket.IO-basierten WebSocket oder Long Polling Comet-Server kommunizieren. Deshalb erfordert Socket.IO die Verwendung der Socket.IO-Bibliotheken sowohl auf dem Client als auch auf dem Server.

Von daher, kann der Punkt mit Socket.io recht schnell abgehandelt werden.


#3

Danke schön, das hatte ich schon befürchtet. Ich werd weiter suchen.


#4

Ich habe kein Framework gefunden, dass mir helfen konnte auf Grund des komplexen Kontext indem sich das Ganze bewegt.

Aber wir haben einen Workaroung gefunden. Mittels nicht sichtbaren iFrame wird die URL des WebSockets via HTTPS aufgerufen, dabei werden die Zertifikate korrekt ausgetauscht allerdings ein 500 Statuscode zurück geliefert. Im Anschluß kann dann die Verbindung zum WebSocket aufgebaut werden. Schön ist anders, aber es funktioniert.