So funktioniert’s
Mit dem Header Strict-Transport-Security teilt eine Website dem Browser mit, dass er sie für eine bestimmte Zeit nur noch über HTTPS aufrufen darf, etwa Strict-Transport-Security: max-age=31536000; includeSubDomains. Ab dann schreibt der Browser jede http://-Adresse der Domain intern auf https:// um, bevor eine Anfrage das Gerät verlässt (RFC 6797).
max-age gibt die Dauer in Sekunden an, includeSubDomains dehnt die Regel auf alle Subdomains aus. Der Header zählt nur, wenn er über HTTPS mit gültigem Zertifikat kommt; über HTTP gesendet wird er ignoriert.
Weil der allererste Besuch noch ungeschützt ist, gibt es die Preload-Liste: Domains mit max-age von mindestens einem Jahr, includeSubDomains und preload lassen sich unter hstspreload.org eintragen. Die großen Browser liefern diese Liste fest mit aus.
Warum gefährlich
Ohne HSTS beginnt jeder Aufruf, der als http:// eingetippt oder verlinkt wird, unverschlüsselt. In einem offenen WLAN kann ein Angreifer diese erste Anfrage abfangen und die Weiterleitung auf HTTPS unterdrücken (SSL-Stripping). Besucher bleiben dann auf einer unverschlüsselten Kopie, und Logins oder Session-Cookies gehen im Klartext über die Leitung.
Falsch eingesetzt sperrt HSTS aus: includeSubDomains auf der Hauptdomain macht jede Subdomain ohne gültiges HTTPS für Browser unerreichbar, die die Domain einmal besucht haben – auch das alte Intranet unter http://intern.example.com. Ein Preload-Eintrag lässt sich nur mit monatelanger Verzögerung zurücknehmen.
So vermeidest du es
- Erst sicherstellen, dass Domain, www und alle genutzten Subdomains über HTTPS mit gültigem Zertifikat antworten und http:// per 301 auf https:// weiterleitet.
- HSTS mit kurzer Laufzeit einführen (max-age=300) und nach erfolgreichem Test schrittweise auf ein bis zwei Jahre erhöhen, etwa max-age=63072000.
- includeSubDomains erst setzen, wenn alle Subdomains geprüft sind, auch die, die andere Dienstleister für den Kunden betreiben.
- Den Header schon auf der ersten HTTPS-Antwort senden, auch wenn sie weiterleitet (etwa von https://example.com auf https://www.example.com) – sonst lernt der Browser die Regel für die Hauptdomain nie.
- Preload nur für Domains beantragen, bei denen dauerhaft alles über HTTPS läuft.
So erkennt DomainWarn es
Der Check „Website“ liest die Header der HTTPS-Antwort: Fehlt Strict-Transport-Security, ist der Header wirkungslos (max-age fehlt oder ist 0, oder er ist syntaktisch ungültig) oder liegt max-age unter 180 Tagen, erscheint ein Hinweis. Das sind bewusst Hinweise ohne Incident, denn ein fehlender Header ist kein Ausfall. Das kostenlose Tool für HTTP-Header wertet fehlendes oder wirkungsloses HSTS als Warnung.
Das Subdomain-Inventar prüft die erste HTTPS-Antwort jedes bekannten Hostnamens auf HSTS – nur bei gültigem Zertifikat, weil Browser den Header sonst ignorieren – und listet Subdomains ohne HSTS als Hinweis, außer die Domain selbst sendet HSTS mit includeSubDomains. Ob eine Domain auf der Preload-Liste steht, prüft DomainWarn nicht.
DomainWarn prüft das für alle deine Domains regelmäßig und meldet sich, wenn etwas fehlt oder sich ändert.