Wenn der Browser erstmal über HTTPS mit dem Webser spricht, ist das grundlegende schonmal getan. Einige Webseiten sind mittlerweile ausschließlich über HTTPS zu erreichen, warum auch nicht. Doch solange der Browser noch versehentlich ungesicherte HTTP-Verbindungen zum Server aufbauen können besteht die Möglichkeit, dass sensible Daten versehentlich über ein unverschlüsseltes POST-Kommando zum Server gelangen. -Oder dass Angreifer durch eine man-in-the-middle-Attacke die HTTP-Verbindung entführen. HSTS steuert gegen.
Die Idee ist einfach: Webseiten, die ausschließlich per HTTPS angesprochen werden wollen, fügen in Ihre Server-Antworten einen HSTS-Header mit ein. Ähnlich wie bei einem Cookie merkt sich der Browser in eigenen Datenbank, von welchen Servern er HSTS-Header bekommen hat und weigert sich fortan, diese per HTTP anzusprechen.
Die HSTS-Header werden dabei mit einer (langlebigen) Time-to-live (TTL) versehen, so dass diese Information grundsätzlich auch wieder expiren würde. -Es kann ja sein, daß sich die Situation mal ändert. Doch mit jedem Besuch auf der HTTPS-Webseite wird die Lebenszeit der HSTS-Information wieder aufgefrischt und die Cache-Lebenszeit beginnt von neuem. Wer Anfangs mit HSTS noch experimentiert, möchte darum vielleicht zunächst kurze TTLs wählen.
Die Konfiguration ist denkbar einfach: Sodern das Modul mod_headers aktiviert ist, wird in der Apache-Konfiguration im Containter der Domain der STS-Header ergänzt:
<VirtualHost <ip>:443> ServerAdmin support@example.com ServerName www.example.com # HSTS einrichten -- erfordert mod_headers! Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" [...] </VirtualHost>
Achtung: Dieser Header wird im HTTPS-Teil der Domain gesetzt, nicht im HTTP-Container auf Port 80! -Denn diesen Daten darf der Client bekanntermaßen eh nicht trauen.
Das Ergebnis läßt sich leicht durch curl überprüfen:
peer@flash:~> curl -I https://webmail.jpberlin.de HTTP/1.1 200 OK Date: Sun, 02 Feb 2014 10:34:05 GMT Server: Apache Strict-Transport-Security: max-age=31536000; includeSubDomains Vary: Accept-Encoding Content-Type: text/html peer@flash:~>
Kommentare