
HTTP Strict-Transport-Security – HTTPS absichern
Ist eine Website per HTTP und HTTPS erreichbar, kann ein Angreifer beispielsweise versuchen, dass sein Opfer in einer Phising E-Mail auf einen präparierten Link klickt und so zur http-Variante gelangt. Dadurch würde eine unverschlüsselte Kommunikation stattfinden. Mit dem HTTP Strict-Transport-Security http-Header kann eine HTTPS-Verbindung immer erzwungen werden.
Wenn eine Website zum ersten Mal über HTTPS aufgerufen wird und der Header Strict-Transport-Security ausgeliefert wird, speichert der Webbrowser diese Informationen ab. Dadurch werden zukünftige Versuche, die Website per HTTP zu laden, automatisch auf HTTPS umgeleitet.
Zwei Parameter sind dafür von besonderem Interesse. Der erste Wert definiert die Ablaufzeit in Sekunden (= Timeout). Wann immer der Header Strict-Transport-Security an den Browser übermittelt wird, aktualisiert er die Ablaufzeit für diese Website. Dadurch können Websites diese Informationen aktualisieren und verhindern, dass der Timeout abläuft. Wenn die im Header Strict-Transport-Security angegebene Ablaufzeit verstrichen ist, wird der nächste Versuch, die Website über HTTP zu laden, wie gewohnt durchgeführt, anstatt automatisch über HTTPS. Mit dem Parameter includeSubDomains wird der Webbrowser angewiesen, HSTS auch auf Subdomains anzuwenden.
Strict-Transport-Security: max-age=EXPIRE-TIME Strict-Transport-Security: max-age=EXPIRE-TIME; includeSubDomains
HTTP Strict-Transport-Security in der .htaccess aktivieren
Bevor der Header hinzugefügt wird, sollte als Erstes die Funktionsfähigkeit der HTTPS-Verbindung (https://www.ssllabs.com/ssltest/) getestet werden. Mit dem folgenden Befehl in der .htaccess-Datei wird der Apache Webserver angewiesen, den HSTS-Header an den Browser zu senden:
Header always append Strict-Transport-Security "max-age=31536000; includeSubDomains"
Deaktivierung des HSTS-Headers
Im Prinzip sollte niemals eine Seite nur noch per HTTP erreichbar sein. Dies kann jedoch passieren, wenn zum Beispiel nach einem Serverumzug kein gültiges HTTPS-Zertifikat mehr zur Verfügung steht. Dann kommt es zu einem Fehler, da der Webbrowser durch den HSTS-Header Eintrag die HTTPS-Verbindung erzwingt.
Im Nachhinein gibt es keine Möglichkeit, die Einträge in den Webbrowsern der Besucher zu löschen. Hierbei handelt es sich um eine Sicherheitsfunktion, da die Möglichkeit zur Löschung ansonsten auch von einem Angreifer genutzt werden könnte.
Sollte es notwendig sein, Strict Transport Security zu deaktivieren, wird das Setzen des Max-Age auf 0 (über eine https-Verbindung) sofort den Strict-Transport-Security-Header ablaufen lassen und den Zugriff über http ermöglichen. Dies muss allerdings vorab erfolgen, solange eine HTTPS-Verbindung besteht. Wenn ein Besucher in diesem Zeitraum die Seite nicht erneut besucht, kommt es danach aber trotzdem zu einem Fehler.
Header always append Strict-Transport-Security: "max-age=0"