Ansicht umschalten
Avatar von Valentin Hilbig
  • Valentin Hilbig

mehr als 1000 Beiträge seit 08.01.2000

TLS-Auth ist nicht für die breite Masse geeignet

Also wenn Du ein CA bist wie LetsEncrypt, das im Browser eingetragen ist, dann kannst Du das mit der TLS-Authentikation natürlich machen (so wie es StartSSL damals gemacht hat).

Wenn Du aber kein eigenes CA hast das schon im Browser ist, dann eher nicht, weil dann wird es verdammt kompliziert!

Das Problem ist, dass der Browser ja das Zertifikat von der Webseite und die Webseite das Zertifikat im Browser testen muss. Das geht am einfachsten, wenn beide Zertifikate auf demselben CA basieren. Um also TLS-Auth in einer Organisation machen zu können macht man das in der Regel so:

- CA mit Self-Signed-Cert.
- Das CA wird im Browser eingetragen.
- Man erstellt mehrere Zwischenzertifikate für die Authentisierung jeweiliger Firmengruppen
- Die Firmengruppen werden eingeschränkt in dem, was sie tun dürfen. Eine z. B. kann also Zertifikate für Webseiten herausgeben, eine andere die pseudonymen bzw. nichtpseudonymen Firmennutzer
- Der Nutzer kann sich dann gegenüber Webseiten autorisieren, indem die Webseite die jeweiligen Zertifikate prüft. Dazu muss die Webseite die Nutzer vorher nicht kennen, die Autorisierung geschieht auf Firmenebene.

Hier im SSO-artigen Umfeld funktioniert das eigentlich sehr gut. Der Nutzer hat 2 Zertifikate, das pseudonyme (das nach Arbeitsrecht nicht getrackt wird) und das nichtpseudonyme (das für die getrackten Dinge wie den Zugriff auf die eigenen personenbezogenen Daten des Arbeitnehmers verlangt wird) und kann ggf. auswählen.

Hier macht außerdem die eine Gruppe die Authentisierung (die Abteilung, die die Zertifikate signiert und den Nutzern bzw. Pseudonymen zuordnet), und die andere Gruppe kann dann die Autorisierung machen (Zwischenzertifikate denen ein Zertifikat gehört wird autorisiert bestimmte Dinge zu tun). Bei all dem ist der User außen vor. Der braucht nicht einmal das Zertifikat in den Browser zu installieren, das ist als Teil des Onboardings beim Account-Setup vollautomatisiert.

Das wiederum bedeutet auch, dass Du ohne Probleme das auf der Ebene von NginX machen kannst, also einfach die erlaubten Zugriffe auf die jeweiligen Zwischenzertifikate machen kannst und gut ist. Die Absicherung der App geschieht also im Transportlayer, die Authentisierung und Autorisierung ebenfalls. Profit und wirklich brauchbar gelöst, und die Webapp kann auf dieser gesicherten Information aufbauen.

Nur funktioniert das im öffentlichen Raum so eben nicht.

Ein Grund ist, dass Du dann nicht EIN Zertifikat (wie bei WebAuthn) hast, sondern unendlich viele. Unmanagebar viele. Die würden so überhand nehmen wie die Cookies. Und am Ende hast Du nur noch einen Authentisierungsbrei und hast überhaupt keine Ahnung mehr, welches Zertifikat zu welcher Webseite gehört. Und das dann auch noch mit vielen vielen vielen Browsern parallel. (Das ist sozusagen der feuchteste aller Träume von Werbetreibenden -> Du authentisierst Dich anhand des Zertifikats, und zwar egal welchen Browser Du verwendest. Wenn das bei denen kleinen Ständer erzeugt der zum Mond und wieder zurück reicht, so dass sie Dich jederzeit und überall ficken können, dann weiß ich nicht.)

Ein weit wichtigerer Grund ist, dass da gar nichts ohne den User funktioniert!

Und das KO-Kriterium beim Einsatz im Web ist, dass Du damit die Nutzer verlierst, weil diese damit auf Dauer vollkommen überfordert werden. Denn kein Browser hat ein dafür brauchbares Zertifikatsmanagement - und das ist auch gut so!

Der "richtige" Weg bei der Erteilung von TLS-Zertifikaten ist:

- Du, der Benutzer, erzeugt einen öffentlichen und einen geheimen Schlüssel.
- Du erzeugst einen Signing-Request, in dem der öffentliche Teil der Identität signiert wird.
- Das schickst Du an das CA der jeweiligen Webseite.
- Diese signiert den ganzen Zinnober und schickt Dir das Zertifikat.
- Das Zertifikat installierst Du nun in den Browser.
- Und wenn die Webseite die Autorisierung haben will, musst Du das Zertifikat zur Übermittlung an die Webseite auswählen.

Mal von dem ganzen CA-Geraffel abgesehen, ist das für die eigentliche Webseite dann schon bequem, es funktioniert also ohne weiteres vollständig auf dem Transportlayer, wie schon im Enterprise-Umfeld.

Aber glaubt hier ernsthaft jemand, dass das die User das so akzeptieren? Einen Registrierungsprozess, der unheimlich viele unheimliche und merkwürdige Schritte beinhaltet die nie ein User zuvor gesehen hat und die auch keiner verstehen will selbst wenn er sie verstehen könnte? Und hinterher muss man auch noch kompliziert die Autorisierung durchführen? Ehrlich?

Aber das Schlimmste kommt noch: Daraus resultiert ein Sicherheitsproblem.

Das ist nichts kleines. Das ist ein absolut gewaltiges Sicherheitsproblem. So ungefähr das schlimmste Sicherheitsproblem seit Bestehen des Web überhaupt. Etwas, das man überhaupt erst einmal gar nicht denken darf!

Warum? Weil die Nutzer darauf trainiert werden, Zertifikate in den Browser zu installieren, und zwar im Rahmen eines alltäglichen normalen Vorgangs.

Der Nutzer ist nicht in der Lage zu differenzieren, ob er nun ein User-Zertifikat oder ein Root-CA einträgt. Für den Benutzer ist beides dasselbe: Äußerst lästig. Er will das immer nur so schnell wie möglich hinter sich bringen, und folgt dabei blind der Anleitung die die Webseite ihm mitteilt. Und er kann nicht erkennen, wenn diese "falsch" ist.

Wie auch. Browser ändern sich. Ständig. Und schlimmer noch, jeder Browser macht es anders. Ständig wird dies oder das verändert, was man im einen Browser kennt ist im anderen versteckt oder vollkommen unterschiedlich gelöst. Wie, das wissen die Nutzer nicht. Aber dass es immer anders ist, das wissen die Nutzer.

Da reicht also ein kleiner Nebensatz aus "das geht jetzt so (vollständige Erklärung siehe unten)" und die Nutzer sind beruhigt und werden alles tun, was da sonst so geschrieben steht. Alles. Inkl. des Versprechens der ersten Nacht und dir ihren Erstgeborenen als Sklave zur Verfügung zu stellen. Denn die "Erklärung unten", die liest sich ja niemand durch.

Mit einem Root-CA aber hast Du die gesamte Sicherheitsinfrastruktur des Browsers unterminiert. Denn damit kannst Du (mit wenigen Ausnahmen wie die Google-Zertifikate im Chrome) beliebige SSL-Zertifikate on-the-fly erzeugen. Genau so funktionieren übrigens auch Middleboxes a la BlueCoat.

Gut, mit TLS1.3 wird das ein klitzekleinwenig schwieriger, aber eben nicht unmöglich. (CAA hilft hier kein Stück weiter. Die Middleboxes haben auch den Resolver unter Kontrolle. Der Browser kann das ja nicht mitbekommen, er vertraut dem CA ja, also auch dem DNSsec oder WebDNS der von der Middlebox ausgeht.)

Aber es bleibt dabei:

Die Nutzer dürfen solch einen Vorgang wie das Installieren eines Zertifikats nicht als "Normalfall" abtun.

Damit verbietet sich TLS-Auth für die breite Masse.

-Tino

Bewerten
- +
Ansicht umschalten