Was HSTS macht
HSTS sagt dem Browser, dass deine Website nur über HTTPS erreichbar ist. Er ruft sie danach nie mehr unverschlüsselt auf, auch wenn jemand „http://“ eintippt.
So funktioniert es
Selbst mit einer Umleitung von HTTP auf HTTPS geht der erste Aufruf oft unverschlüsselt hinaus, etwa wenn jemand nur example.com eintippt. In einem fremden WLAN kann ein Angreifer genau diesen Aufruf abfangen und den Besucher auf einer unverschlüsselten Kopie festhalten.
HSTS (HTTP Strict Transport Security) schließt diese Lücke. Deine Seite sendet über HTTPS den Header Strict-Transport-Security. Der Browser merkt sich für die angegebene Zeit, dass er den Namen nur noch über HTTPS aufruft. Aus http:// macht er selbst https://, bevor eine Anfrage das Gerät verlässt. Bei Zertifikatsfehlern kann der Besucher die Warnung dann nicht mehr wegklicken.
Der Browser beachtet den Header nur über HTTPS und nur für den Namen, der ihn gesendet hat. Deshalb sollte HTTP zuerst auf HTTPS desselben Hosts umleiten (siehe HTTPS).
Worauf es ankommt
- max-age von einem Jahr. Die Dauer steht in Sekunden. Empfohlen sind 31536000 (ein Jahr); unter einem halben Jahr ist der Schutz zu kurz, weil der nächste Besuch nach Ablauf wieder ungeschützt ist.
- includeSubDomains nur, wenn alle Subdomains HTTPS können. Dann gilt der Schutz auch für
shop.example.comund alle anderen. Eine Subdomain ohne Zertifikat ist danach im Browser nicht mehr erreichbar. max-age=0schaltet HSTS ab. Browser, die es schon kannten, vergessen es. Das ist nur für den geordneten Rückzug gedacht.- Ein Header, ein Wert. Fehlt ein lesbares
max-age, ignorieren Browser den Header. Kommt er doppelt, zählt der erste. - preload ist ein eigener Schritt. Mit
preload,includeSubDomainsund mindestens einem Jahr kann die Domain auf hstspreload.org in die Liste eingetragen werden, die in die Browser eingebaut ist. Dann ist auch der allererste Besuch geschützt. Das Austragen dauert Monate; überlege es dir vorher gut.
So richtest du es ein
Der empfohlene Header:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Er wird im Webserver oder in der Anwendung gesetzt, von dir, deiner Agentur oder über die Verwaltung des Hosters.
Bei nginx gehört die Zeile in den Server-Block für HTTPS. Wer unsicher ist, ob alle Subdomains HTTPS können, beginnt ohne includeSubDomains und mit kurzer Dauer, prüft alles und erhöht dann auf ein Jahr. Viele CDNs und Sicherheits-Plugins für CMS bieten HSTS als Schalter an.