HSTS – Umstellung der eigenen Webseite auf https only

Heutzutage sollte man seine eigene Webseite mit SSL/TLS absichern. Egal welche Informationen sich darauf befinden, jede Webseite sollte seinen Besuchern die Sicherheit der verschlüsselten Dateiübertragung bieten.

Mit HSTS gibt es ein noch relativ junges Protokoll, welches von den gängigen Browsern unterstützt wird und nach erfolgreicher Implementation alle Zugriffe automatisch über https:// geladen werden. Wie dies funktioniert zeige ich Euch in diesem Beitrag.

Was genau bewirkt HSTS?

Aktuell besteht das Problem, das ein Besucher der eigenen Webseite im Browser in der Regel den Domainnamen eingibt, oder über einen Link zu eigenen Webseite gelangt. Sofern der Link oder die direkte Eingabe in der URL-Zeile aber nicht explizit mit https://www.domain.de erfolgt, landet der Besucher erstmal auf der unverschlüsselten http://www.domain.de . Jetzt  fügt  man eine Rewrite Regel ein, welcheden Besucher auf die https://www.domain.de Seite umzulenkt.
Soweit sogut, der Besucher ist nun auf der verschlüsselten Seite und alles im grünen Bereich.

Aber genau hier ist das Problem, dass der allererste Zugriff auf eine Webseite immer unverschlüsselt erfolgt und somit Dritten die Möglichkeit gibt, einzusehen, welche URL aufgerufen wurde.
Hier kommt HSTS zum Einsatz.

Wie funktioniert HSTS?

Um  HSTS (HTTP Strict Transport Security) zu nutzen, wird in der .htaccess Datei des Webservers ein entsprechender Eintrag gesetzt, welcher der Browser beim allerersten Aufruf der Domain interpretiert und sich intern einen Vermerk anlegt, dass diese Domain in Zukunft ausschliesslich über https:// geladen wird.

Hierzu führt der Browser eine interne Tabelle, mit allen Domains, welche in Zukunft ausschliesslich über SSL/TLS Protokoll geladen werden sollen.

Wie Ihr schon bemerkt habt, ist auch hier der allererste Zugriff noch nicht gesichert, sondern es wird nun auch  erst der zweite Aufruf, wenn der Besucher wieder kommt, verschlüsselt, also prinzipiell nur eine kleine Verbesserung.

Wie erreiche ich es aber dass auch der allererste Zugriff auf meine Webseite verschlüsselt erfolgt?

Preloading ist das Zauberwort. Wir geben der Header Anweisung zusätzlich den Parameter „preloading“ mit und tragen die eigene Domain noch auf den zugehörigen Webservice ein (Link weiter unten).
Was nun passiert ist, dass die Domain in eine große Liste mit aufgenommen wird, welche bei jeder neuen Browserinstallation, bzw. Update mit ausgeliefert wird. Somit „weiss“ in Zukunft der Browser welche Webseiten „https only sind“ und lädt diese entsperchend immer mit SSL/TLS, bzw. über https://domain.de, egal was man in den Browser eingibt.

Was sind die Vorraussetzungen für HSTS?

Kurz zusammengefasst, muß man folgende Vorraussetzungen erfüllen

  1. Ein gültiges SSL-Zertifikat haben.
  2. Es muß ein Redirect von http auf https geben.
  3. Alle Subdomains benötigen ebenfalls ein SSL-Zertifikat
  4. Ein Header muß in der .htaccess Datei gesetzt werden, der ff Werte aufweist:
    • Das max-age muss mindestens 18 Wochen betragen (10886400 Sekunden)
    • Die includeSubDomains Direktive muss spezifiziert sein
    • preload Direktive muß spezifiziert sein

Was muß ich beachten, wenn man HSTS aktiviert?

Ganz wichtig ist, wenn man sich für diesen Schritt entscheidet, man in Zukunft immer ein gültiges SSL-Zertifikat für alle Subdomains benötigt, also z.B. www.meinedomain.de intern.meine.domain.de home.meinedomain.de usw. Ohne gültiges SSL-Zertifikat kann sonst die Webseite nicht mehr aufgerufen werden, dies lässt sich auch nicht mehr umgehen, dass einzigste was man dann noch machen kann, ist den HSTS Eintrag wieder herauszunehmen (bzw. die Laufzeit auf 0 zu setzen und eine E-Mal an das  Support-Team von Google Chromium schreiben, dies wieder zu löschen.  Besser ist es allerdings dafür zu sorgen, dass alle Subdomains immer mit einen gültigen SSL-Zertifikat ausgestattet sind. In Zeiten von Let’s Encrypt sollte dies ja auch kein Problem mehr darstellen.

Jaja ist gut, was muß ich nun einstellen, dass HSTS aktiviert wird?

Zwei Schritte sind hierfür notwendig:

Im ersten Schritt tragen wir  In der .htaccess folgende Zeilen ein:

Header always set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload" env=HTTPS

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

Dies muß ganz oben in der .htaccess eingetragen sein.

In Zeile 1 weisen wir HSTS an für ca 365 Tage ab dem Zugriff gültig zu sein, dass alle Subdomains auch SSL gesicher sind. Setzen das Preload-Flag, welches wir später benötigen und geben dem Apache die Anweisung dies nur auszuführen, wenn das aktuelle Protokoll https ist (env=https). Somit wird es nicht geladen, wenn ein Besucher über http:// kommt.

in den nächsten Zeilen, schreiben wir weiterhin alle Zugriffe welche unverschlüsselt eintreffen ({HTTPS} off), auf https://domain.de umgeschrieben werden. Somit fangen wir auch alle Browser/Bots usw ab, die kein HSTS unterstützen.

Im zweiten Schritt tragen wir die Domain (meinedomain.de ohne Subdomain) noch bei https://hstspreload.appspot.com/ ein und bestätigen dies. Sofern die Webseite alles in grün darstellen ist alles OK, sollte es Fehler geben, müssen diese noch behoben werden.

HSTS-Eintrag für martinmuc.de
HSTS-Eintrag für martinmuc.de

Mit welchen Browsern ist HSTS kompatibel?

HSTS wird von den modernen Browsern wie MS Edge, Google Chrome, Mozilla Firefox, Apple Safari und den meisten Opera Browsern standardmässig unterstützt, somit hat man eine sehr hohe Reichweite abgedeckt. Die restlichen Browser können wir auch noch abfangen.
Hier erhaltet Ihr eine Liste der HSTS-fähigen Browser.

Was bietet HSTS für Vorteile?

  • Die Besucher haben die Sicherheit, dass niemand ausser der Besucher selbst und der evtl. der Webseitenbetreiber über die Webstatistik wissen, wann von wem welche URL aufgerufen wurde.
  • Es fällt ein Redirect auf die SSL-Version der Webseite weg und erhöht damit minimal die Ladegeschwindigkeit.
  • Google wertet Seiten mit SSL-Zertifikat im organischen Suchindex höher ein, somit verschafft man sich einen kleinen Vorteil vor der Konkurrenz, die noch kein SSL-Zertifikat hat (dies hat aber nicht unbedingt was mit HSTS zu tun)
  • Man macht dies nicht für sich selbst, sondern für seine Besucher, dies schafft Vertrauen, weil einen die Besucher es Wert sind, dass diese alle Ihre abegrufenen Informationen auch verschlüsselt erhalten.

Thats it 🙂

Über Kommentare würde ich mich freuen


 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.