Der aktuelle JS-Sprachstandard stellt keine Zertifikatsinformationen zur Verfügung; darüber hinaus hängt es wahrscheinlich davon ab, wie Sie JavaScript verwenden. Wenn Sie erwarten, dass der Browser des Endbenutzers Zertifikatsinformationen zur Verfügung stellt, dann wird es wirklich problematisch, weil Sie mindestens FF, Chrome, Safari, IE, Edge, ... dazu bringen müssen, sie zur Verfügung zu stellen.
Wie in diesem Artikel erwähnt, ist jedoch Stelle für Informationssicherheit Dies ist keine wünschenswerte Option für diese Browser, da ein Website-Entwickler einen Code schreiben könnte, der fälschlicherweise den Anmeldedaten des Benutzers vertraut.
Es ist nicht so sehr ein Sichtbarkeits-Sicherheitsrisiko, das Javascript daran hindert, auf die aktuellen SSL-Zertifikatsinformationen des Browsers zuzugreifen, sondern eher ein Sicherheitsrisiko der vierten Wand, bei dem sich der JS-Entwickler bewusst sein muss, dass das "vom Benutzer akzeptierte" Zertifikat nicht unbedingt das von der Website bereitgestellte ist. Die HTML-Seite sollte die Sicherheitsprobleme nicht mit clientseitigem Code behandeln, sondern sich darauf verlassen können, dass die Sicherheitsschicht ihre Aufgabe ordnungsgemäß erfüllt. (Ich kann durchaus verstehen, dass man die Sicherheitsebene überprüfen möchte, aber jede Verwaltungsarbeit, die man auf der obersten Ebene leistet, wird entweder nur oberflächlich sein oder eine Überarbeitung der gesamten Biosphäre bedeuten)
Denn nehmen wir einmal an, dass Javascript eine Möglichkeit bietet, mit dem Zertifikat zu arbeiten, dann gibt es keine Möglichkeit, den folgenden Austausch zu stoppen, wenn Bob Mallory bereits vertraut, weil seine Sicherheit gebrochen ist:
Büroangestellter Bob befindet sich auf der einen Seite der großen Firewall von Mega Corp., IT Mallory ist für die Firewall zuständig, die den Datenverkehr in und aus dem Unternehmen leitet, und die fantastische Website von Web Host Alice ist im WWW zu finden.
- Gemäß der Firmenpolitik der Mega Corp. ist Bob dazu angehalten, Mallorys Aussagen für bare Münze zu nehmen.
- Bob, der die Website von Alice besuchen möchte, aber keinen direkten Zugang von außen hat, versucht, eine sichere Verbindung durch die Firewall herzustellen, indem er sein Zertifikat hochhält (z. B.: "Ich erkläre hiermit, dass ich Bob bin") und Alice auf sehr umständliche Weise fragt: "Welches Zertifikat habe ich dir geschickt?"
- Mallory erhält Bobs Anfrage, gibt aber stattdessen ihre eigene weiter (z. B.: "Äh, Bob sagt, ich darf seine Webmail lesen"), und obwohl Mallory Bobs verworrene Frage nicht versteht, wiederholt sie sie gegenüber Alice: "akdvyfenwythnwerhy?".
- Alice rechnet nach und findet heraus, dass "akdvyfenwythnwerhy?" die Frage "Welches Zertifikat habe ich dir geschickt?" bedeutet und antwortet Mallory mit dem, was sie sieht ("Hallo Bob, hier ist Alice, wie du gesagt hast: Äh, Bob sagt, ich darf seine Webmail lesen").
- Mallory rechnet ein wenig nach, hat einen Aha-Moment "akdvyfenwythnwerhy?=welches Zertifikat habe ich dir geschickt?", und beantwortet Bobs Frage im Namen von Alice("Hallo Bob, hier ist Alice( Mallory ) sagten Sie: Ich erkläre hiermit, dass ich Bob bin").
- Bob glaubt, dass das Leben gut ist und liest weiter seine Webmail, denn er weiß, dass Mallory ihn niemals anlügen würde.
- Mallory ist nun in der Lage, beide Seiten des Gesprächs zu lesen und leitet Bobs Anfrage, seine Webmail zu lesen, an Alice weiter.
- Alice erhält Bobs Anfrage und sagt: "Hey, Moment mal, Bob, du musst diesen JS-Code ausführen, um zu beweisen, dass du weißt, dass du mit Alice sprichst.
- Mallory holt sich den Code, führt ihn aus und schickt die Ergebnisse, die besagen, dass sie weiß, dass sie mit Alice spricht, an Alice zurück.
- Alice sagt: "Das reicht mir, hier ist deine Webmail.
- Mallory liest Bobs Webmail, bevor sie sie an Bob weitergibt, und alle sind glücklich.
(Hinweis: Ich habe nicht auf den Fall, wenn Sie JS-Server-seitig ausgeführt werden, dann würde es davon abhängen, welches Programm Sie verwenden, um Ihre JS-Code ausführen).
Edit 4/4/2018 -- Während das obige nicht falsch ist, ist es mehr aus der Perspektive von eingebettetem und verlinktem JS als über das JS-Objekt `XMLHTTPRequest`; außerdem ist das stärkste Argument gegen die gemeinsame Nutzung von PKI-Details mit `XMLHTTPRequest` folgendes:
Es muss eine klare Trennlinie zwischen dem HTTP-Teil und dem S-Teil des HTTPS-Protokolls bestehen bleiben. JavaScript und seine XMLHTTPRequest
Objekt befindet sich auf der HTTP(app layer)-Seite dieser Linie, während der gesamte Zertifikatsaustauschprozess auf der S(trans/sec layer)-Seite dieser Linie stattfindet. Um die Sicherheitsseite atomar (hot-swap-fähig) zu halten, kann ihre interne Arbeitsweise nicht über die Leitung zur Anwendungsseite offengelegt werden; denn es könnte der Tag kommen, an dem die Transport-/Sicherheitsschicht keine PKI-Zertifikate mehr verwendet, um ihren sicheren Kommunikationsdienst zu erleichtern, und wenn dieser Tag kommt, müsste niemand bestehenden JS-Code umschreiben, der sich auf die in diesen Zertifikaten enthaltenen Details verließ, um mit der Ausbreitungswelle fertig zu werden, die dadurch verursacht wird, dass die www-Gemeinschaft langsam ihre bevorzugte Variante einer neuen Sicherheitsschicht annimmt.
Abgesehen davon scheint die Sicherheitsseite auch die Überprüfung von Rechtssubjekten vorzunehmen - zumindest in einigen Fällen wie EV-Zertifikaten -, und das ist IMO ein Manko der RFC7230 Abschnitt 2.7.2 dass sie nicht den Begriff authority
der https-URI
um eine optionale legalentity
die die Sicherheitsschicht verwenden würde, um zu überprüfen, ob die URL, mit der sie kommuniziert, nicht nur der richtige Endpunkt ist, sondern auch unter der Kontrolle der beabsichtigten Geschäftsbeziehung steht.
authority = [ userinfo "@" ] host [ "#" legalentity ] [ ":" port ]
legalentity = *( unreserved / pct-encoded / sub-delims )
0 Stimmen
Ich glaube nicht, dass dies möglich ist.
0 Stimmen
Ich habe nach einer Javascript-API gesucht, um die bewährten Anmeldeinformationen von seitenübergreifenden Anfragen zu testen, um die Sicherheit der Website zu verbessern. Leider verwirft der Browser diese Informationen, was die Skripte dazu zwingt, blind darauf zu vertrauen, dass Inhalte von Drittanbietern jetzt vertrauenswürdig sind, weil sie in der Vergangenheit vertrauenswürdig waren. Das ist ein trauriger Zustand :-(
1 Stimmen
Manche Leute fügen den Antwortkopfzeilen Zertifizierungsdetails hinzu. In diesem Fall könnten Sie eine xhr-Anfrage stellen und die req.getAllResponseHeaders() lesen
0 Stimmen
Das ist besser als nichts, bietet aber keine wirkliche Sicherheit. Mir geht es hauptsächlich darum, Daten von Werbetreibenden zu erhalten. Wenn ich einen Werbecode für einen Kunden schreibe, möchte ich nicht alle paar Monate überprüfen müssen, ob der Werbetreibende noch im Geschäft ist, um zu verhindern, dass seine Website gekapert wird, weil ich Skriptressourcen von einer Website beziehe, die nicht mehr dem Werbetreibenden gehört, und ich möchte dem Kunden nicht sagen: "Das ist jetzt sicher, aber du bist jetzt auf dich allein gestellt, da ich fertig bin. Viel Glück!"