HTTP Strict Transport Security
Abkürzung: HSTS
Der Mechanismus verlagert eine Entscheidung vom Server zum Client. Ohne HSTS entscheidet bei jedem Aufruf der Server, ob er auf HTTPS umleitet. Mit HSTS entscheidet der Browser schon vorher, dass er es gar nicht anders versucht.
Die Lücke, die HSTS schließt
Wer example.net in die Adresszeile tippt, löst eine HTTP-Anfrage aus — ohne Schema nehmen Browser historisch Port 80. Der Server antwortet mit einer Umleitung auf HTTPS, und ab dort ist alles verschlüsselt.
Angreifbar ist genau dieser erste Umlauf. Wer im Netzweg sitzt, fängt die Umleitung ab und hält die Verbindung auf HTTP: Er spricht mit dem Server verschlüsselt und mit dem Nutzer im Klartext. Im Browser fehlt dann lediglich das Schloss — kein Fehler, keine Warnung. Für solche Angriffe gab es fertige Werkzeuge, lange bevor HSTS existierte.
Der Header
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
max-age nennt in Sekunden, wie lange die Festlegung gilt. Jeder weitere Besuch über HTTPS setzt die Frist neu, sodass ein regelmäßig besuchter Auftritt dauerhaft geschützt bleibt.
includeSubDomains erstreckt die Regel auf alle Unterdomains — auch auf solche, die es heute noch nicht gibt.
preload ist keine Anweisung an den Browser, sondern die Einverständniserklärung zur Aufnahme in die vorgeladene Liste.
Entscheidend ist eine Einschränkung, die in der Norm steht: Über HTTP ausgelieferte HSTS-Header werden ignoriert. Andernfalls könnte ein Angreifer den Header selbst setzen und eine fremde Domain für Jahre unerreichbar machen.
Was der Browser dann tut
Zwei Dinge, von denen das zweite regelmäßig überrascht.
Erstens wandelt er http://-Aufrufe für diese Domain intern in https:// um, bevor überhaupt ein Paket das Gerät verlässt. Es gibt keine HTTP-Anfrage, die man abfangen könnte.
Zweitens lassen sich Zertifikatsfehler nicht mehr wegklicken. Ohne HSTS kann der Nutzer eine Warnung bestätigen und trotzdem fortfahren; mit HSTS ist die Verbindung endgültig abgewiesen. Das ist beabsichtigt — und der Grund, warum ein abgelaufenes Zertifikat auf einer HSTS-Domain die Seite vollständig unerreichbar macht, statt nur eine Warnung zu erzeugen.
Das Erstbesuchsproblem und die Preload-Liste
HSTS wirkt erst, wenn der Browser den Header einmal gesehen hat. Der allererste Besuch bleibt angreifbar, und auf einem frisch installierten System ist jeder Besuch der erste.
Dafür führen die Browserhersteller eine Liste von Domains, die von Anfang an als reine HTTPS-Domains gelten. Sie wird in die Programmdateien eingebacken und mit jeder neuen Version verteilt. Gepflegt wird sie als Chromium-Projekt, übernommen auch von Firefox, Safari und Edge.
Die Aufnahme setzt voraus, dass die Domain ein gültiges Zertifikat hat, von HTTP auf HTTPS umleitet und einen Header mit mindestens einem Jahr Laufzeit, includeSubDomains und preload ausliefert.
Die Einbahnstraße
Hier liegt das eigentliche Betriebsrisiko: HSTS lässt sich leicht einschalten und schwer zurücknehmen.
Ein max-age=0 erreicht nur Besucher, die noch einmal über HTTPS vorbeikommen. Wer die Seite ein halbes Jahr nicht aufruft, trägt die alte Festlegung weiter. Bei der Preload-Liste ist es gravierender: Die Entfernung wird beantragt, in die nächste Browserversion aufgenommen und erreicht die Installationen über Monate hinweg. Solange bleibt die Domain für alle nur über HTTPS erreichbar.
Daraus folgen zwei praktische Regeln.
includeSubDomains setzt man erst, wenn jede Unterdomain HTTPS beherrscht. Das schließt interne Namen ein, Geräte mit eigener Weboberfläche, Altsysteme und Dienste, von denen niemand mehr weiß. Eine Druckerverwaltung unter drucker.firma.de ohne Zertifikat ist nach dem Setzen des Headers nicht mehr aufrufbar.
preload setzt man erst, wenn die Umstellung über Monate stabil lief. Es ist die einzige Einstellung in diesem Umfeld, deren Rücknahme nicht in eigener Hand liegt.
HSTS als Erkennungsmerkmal
Eine Nebenwirkung, die in der Norm bereits angesprochen ist: Der HSTS-Zustand ist gespeicherter Zustand im Browser, und zwar getrennt je Domain.
Wer über viele Unterdomains verfügt, kann für eine Auswahl davon HSTS setzen und später prüfen, welche davon der Browser bereits umwandelt. Das Muster lässt sich als Bitfolge lesen und wirkt damit wie eine Kennung, die ein Löschen der Cookies übersteht. Die Browserhersteller haben die Nutzbarkeit eingeschränkt, etwa indem der Zustand beim Löschen der Websitedaten mit verschwindet.