Was ist HSTS und wie wird es eingerichtet?

0
235
Shutterstock/Pavel Ignatov

HTTPS ist sehr sicher, hat aber einen Fehler: Es ist standardmäßig nicht aktiviert. Ein Angreifer in der Mitte könnte die Verbindung eines Benutzers kapern, bevor Sie ihn anweisen können, HTTPS zu verwenden. HSTS löst dieses Problem und aktiviert HTTPS-Site-weit.

Eine SSL-Verschlüsselung ist in erster Linie eine Voraussetzung für HSTS, da ansonsten die Aktivierung von HSTS Ihre Site unzugänglich macht. Sie können unseren Leitfaden zum Einrichten kostenloser SSL-Zertifikate mit LetsEncrypt lesen, um HTTPS auf Ihrer Website zu aktivieren.

Wie funktioniert HSTS?

HSTS steht für HTTP Strict Transport Security und regelt, wie der Browser eines Nutzers eine Verbindung zu Ihrer Website herstellen soll.

So funktioniert die Verbindung zu Ihrer Website normalerweise. Ein Benutzer möchte eine Verbindung zu Ihrer Website herstellen und fordert Ihren Server auf, eine Verbindung herzustellen. Ihr Server übernimmt die Verantwortung und sendet eine 301 Moved Permanently-Antwort an den Browser, die ihm mitteilt, dass die angeforderte HTTP-Adresse auf HTTPS umgeleitet werden muss. Der Benutzer fährt wie gewohnt fort und surft sicher.

Ein Angreifer mit Kontrolle über die Verbindung (wie es bei Man-in-the-Middle-Angriffen der Fall ist) könnte jedoch leicht die 301-Antwort blockieren und die Kontrolle über die Browsersitzung dieses Benutzers übernehmen. Dies ist ein wichtiges Problem, da es den Zweck der Verschlüsselung der Website von vornherein zunichte macht.

Werbung

Wenn HSTS aktiviert ist, sendet der Server dieselbe 301 Moved Permanently-Antwort, sendet aber auch einen Header mit der Aufschrift “Hey, ich unterstütze HTTP nicht. Versuchen Sie nicht einmal mehr HTTP-Anfragen zu stellen, da ich sie alle umleiten werde.” Der Browser erhält die Nachricht und leitet sich selbst zu HTTPS um, bevor er etwas sendet. Dadurch wird sichergestellt, dass Ihre Website standardmäßig immer vollständig HTTPS verwendet.

HSTS-Preloading

Standard-HSTS hat jedoch eines Großer Fehler: Die allererste Verbindung eines Benutzers ist noch unsicher. Wenn ein Benutzer Ihre Site bereits verwendet hat, wird der Browser die HSTS-Anfrage in Zukunft berücksichtigen. Die anfängliche HSTS-Antwort ist jedoch unsicher. Wenn also ein Benutzer in einem Café surft und Ihre Website zum ersten Mal (oder zum ersten Mal auf einem Mobilgerät) öffnet, kann seine Verbindung immer noch gehackt werden.

Das HSTS-Preloading ist eine Initiative des Chromium-Projekts, um dieses Problem zu lösen. Das Chromium-Projekt unterhält eine Liste von Websites, die ständig HSTS-aktiviert sind. Diese Liste ist in die meisten gängigen Browser integriert und der Browser prüft sie, bevor er Anfragen an neue Websites stellt.

Wenn Sie auf der Liste stehen, verhält sich der Benutzer selbst dann, wenn er noch nie zuvor mit Ihrer Website interagiert hat, so, als hätte er Ihren HSTS-Header bereits gesehen und kommuniziert nie mit HTTP. Dadurch ist die Verbindung von Anfang an absolut sicher.

Aktivieren von HSTS und Beitritt zur Preload-Liste

HSTS kann mit a . aktiviert werden einfacher Header, der allen Antworten Ihres Servers hinzugefügt wird:

Strict-Transport-Security: max-age=300; includeSubDomains; preload

Sie können dies in die Konfigurationsdatei Ihres Webservers aufnehmen. In Nginx können Sie beispielsweise den Header festlegen, indem Sie eine add_header-Zeile in Ihren Serverblock einfügen:

add_header Strict-Transport-Security 'max-age=300; includeSubDomains; Vorspannung; immer;' Werbung

Und für Apache ist der Befehl ähnlich, mit der Zeile Header Always set:

Header always set Strict-Transport-Security “max-age=300; includeSubDomains; preload”

Allerdings , gibt es noch ein paar weitere Schritte, um sicherzustellen, dass alles richtig funktioniert und zum Vorladen berechtigt ist.

Stellen Sie zunächst sicher, dass Sie alle HTTP-Anfragen an HTTPS umleiten. Auf Nginx können Sie dies tun, indem Sie alle Port 80-Anfragen (HTTP) abhören und eine 301-Anfrage senden, wobei die URL in das HTTPS-Äquivalent geändert wurde:

server { listen 80; 301 https://$host$request_uri zurückgeben; }

Um sich für das Preloading zu qualifizieren, müssen Sie außerdem sicherstellen, dass alle Ihre Subdomains durch Ihr SSL-Zertifikat abgedeckt sind und dass Sie sie über HTTPS bereitstellen. Dies können Sie mit einem Wildcard-Zertifikat tun, das Sie kostenlos von LetsEncrypt erhalten. Wenn Sie nicht vorladen, ist dies nicht erforderlich, aber dennoch ratsam.

Sie können überprüfen, ob HSTS richtig funktioniert, indem Sie Ihre Site mit aktiviertem Header laden, dann zu chrome://net-internals/#hsts gehen und Ihren Site-Namen in die “Query HSTS/PKP domain” Suchwerkzeug. Wenn Ihre Site eine solche Ausgabe anzeigt, ist HSTS aktiviert.

Außerdem sollten Sie prüfen, ob der Strict-Transport-Security-Header in den Antwortheadern Ihrer Website enthalten ist. Dies können Sie über den Tab “Netzwerk” in der Chrome-Entwicklungskonsole tun:

Werbung

Sobald Sie all dies getan haben, sollten Sie testen, ob alles funktioniert. und dass beim Einschalten von HSTS nichts kaputt gegangen ist. Wenn es keine Probleme gibt, können Sie zur Vorladeseite für die Einreichung gehen, Ihren Domainnamen eingeben und Ihre Website einreichen.

Probleme mit HSTS und HSTS-Vorladen

Mit HSTS ist Ihre Website jetzt gezwungen, HTTPS für alles zu verwenden. Dies umfasst jede Subdomain, sogar interne Tools. Jede Subdomain, die Sie haben, muss über ein gültiges SSL-Zertifikat verfügen und mit HTTPS gesichert sein, sonst ist sie für die Dauer des HSTS-Headers (das bis zu zwei Jahre betragen kann) nicht zugänglich. Wenn Sie ein Wildcard-Zertifikat haben, können Sie einige dieser Probleme lösen, aber Sie müssen es testen, bevor Sie es für einen längeren Zeitraum aktivieren.

Das Hauptproblem beim HSTS-Vorladen ist, dass es sehr dauerhaft ist. Das maximale Mindestalter beträgt ein Jahr. Sobald Ihre Website in die Liste aufgenommen wurde, können Sie die Liste nicht mehr verlassen, ohne einen langwierigen Entfernungsprozess zu durchlaufen, bei dem jeder Nutzer eine Browseraktualisierung durchführen muss, um die Änderungen zu übernehmen.

Sie können sich diese Meta-Buglist mit Entfernungsanfragen ansehen, um zu sehen, was die größten Probleme in der Praxis sind. Uber hatte Probleme mit Subdomains. Subdomains der dritten und höheren Ebene werden bei normalen Wildcard-Zertifizierungen möglicherweise nicht unterstützt. Eine Website aus Schweden meldet sogar deutlich geringere Werbeeinnahmen, da die lokalen Werbetreibenden ihre Ressourcen nicht über HTTPS laden und HSTS jede unsichere HTTP-Anfrage blockiert, die gestellt wird, während der Nutzer mit Ihrer Website verbunden ist.

Der beste Weg, diese Probleme zu vermeiden, besteht darin, HSTS schrittweise einzuführen, bevor Sie dauerhaft auf Vorladen umstellen. Das Chromium-Projekt empfiehlt, in Intervallen zu testen, indem der max-age-Wert zuerst auf fünf Minuten gesetzt wird, um zu testen, ob er funktioniert:

max-age=300; includeSubDomains

Dann zu einer Woche für einen längeren Test:

max-age=604800; includeSubDomains

Dann für einen Monat, bis Sie sicher sind, dass keine Probleme vorliegen.:

max-age=2592000; includeSubDomains-Werbung

Wenn etwas schief geht und Sie eine sehr lange Max-Age-Property festlegen, können Sie das lokale Flag von der Chrome-Seite “net-internals” löschen.

Sobald Sie es 8217;Sie können sicher sein, dass nichts schief geht, wenn Sie immer nur HTTPS verwenden. Sie können Ihr maximales Alter auf zwei Jahre festlegen, die Preload-Richtlinie hinzufügen und Ihre Website zum Preload einreichen.