HSTS (HTTP Strict Transport Security) ist ein Sicherheits-Header, der Browser anweist, immer über HTTPS zu verbinden — selbst wenn der Benutzer http:// eingibt oder auf einen HTTP-Link klickt. Sobald ein Browser einen HSTS-Header erhält, stuft er automatisch alle zukünftigen Anfragen auf HTTPS hoch und verhindert so Downgrade-Angriffe und unsichere Verbindungen.
Warum HSTS wichtig ist
Ohne HSTS kann die erste Anfrage an Ihre Website HTTP sein (bevor die 301-Weiterleitung greift). Während dieses kurzen Zeitfensters kann ein Angreifer im Netzwerk:
- HTTPS entfernen — die Weiterleitung abfangen und den Benutzer auf HTTP halten (SSL-Stripping-Angriff)
- Cookies stehlen — wenn Cookies über die erste HTTP-Anfrage gesendet werden
- Inhalte einschleusen — die Weiterleitungsantwort manipulieren
HSTS eliminiert dieses Zeitfenster. Nach dem ersten HTTPS-Besuch versucht der Browser nie wieder HTTP.
Wie Sie HSTS aktivieren
Nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
Fügen Sie dies in Ihren HTTPS-server-Block (Port 443) ein, nicht in den HTTP-Weiterleitungsblock.
Apache
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Erfordert mod_headers (sudo a2enmod headers).
Cloudflare
Dashboard → SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → Aktivieren.
HSTS-Parameter
| Parameter | Beispiel | Bedeutung |
|---|---|---|
max-age | 63072000 (2 Jahre) | Wie lange (in Sekunden) der Browser sich merkt, HTTPS zu verwenden |
includeSubDomains | — | Wendet HSTS auch auf alle Subdomains an |
preload | — | Signalisiert die Absicht, der HSTS-Preload-Liste beizutreten |
max-age wählen
| Phase | max-age | Zweck |
|---|---|---|
| Testen | 300 (5 Minuten) | Überprüfen, ob HTTPS funktioniert, bevor Sie sich festlegen |
| Zuversichtlich | 604800 (1 Woche) | Geringes Risiko bei Bedarf eines Rollbacks |
| Produktion | 31536000 (1 Jahr) | Standardempfehlung |
| Langfristig | 63072000 (2 Jahre) | Erforderlich für die Preload-Liste |
Klein anfangen, schrittweise erhöhen. Wenn HTTPS ausfällt, während ein langer max-age-Wert gecacht ist, können Besucher Ihre Website überhaupt nicht erreichen — der Browser weigert sich, über HTTP zu verbinden.
HSTS Preload
Die HSTS-Preload-Liste ist eine Liste von Domains, die in Browser fest einprogrammiert sind, um immer HTTPS zu verwenden — sogar beim allerersten Besuch (bevor ein HSTS-Header empfangen wird).
Voraussetzungen für Preload
- Ein gültiges HTTPS-Zertifikat bereitstellen
- HTTP auf HTTPS weiterleiten auf demselben Host
- HSTS-Header mit
max-age≥ 63072000 (2 Jahre) - Die
includeSubDomains-Direktive einschließen - Die
preload-Direktive einschließen
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Für Preload einreichen
Gehen Sie zu hstspreload.org, geben Sie Ihre Domain ein und reichen Sie sie ein. Nach Prüfung (Wochen bis Monate) wird Ihre Domain in die integrierten Listen der Browser aufgenommen.
Warnhinweise zum Preload
- Es ist schwer rückgängig zu machen. Die Entfernung von der Preload-Liste dauert Monate und erfordert einen Browser-Release-Zyklus. Während dieser Zeit kann Ihre Domain nur über HTTPS erreicht werden.
includeSubDomainsist Pflicht — jede Subdomain muss HTTPS unterstützen. Wennstaging.example.comkein Zertifikat hat, wird es unerreichbar.- Nur Preload verwenden, wenn Sie sicher sind, dass alle aktuellen und zukünftigen Subdomains HTTPS unterstützen werden.
Häufige Fehler
HSTS in der HTTP-Antwort setzen
HSTS darf nur über HTTPS gesendet werden. Wenn Ihre HTTP-Weiterleitung ebenfalls den HSTS-Header sendet, ignorieren Browser ihn (die Spezifikation erfordert HTTPS). Setzen Sie den Header nur in Ihrem Port-443-Block.
Subdomains vergessen
includeSubDomains wendet HSTS auf alle Subdomains an. Wenn internal.example.com kein HTTPS hat, wird es unerreichbar. Prüfen Sie alle Subdomains vor der Aktivierung.
max-age zu früh zu hoch setzen
Wenn HTTPS ausfällt (abgelaufenes Zertifikat, Konfigurationsfehler), können Besucher nicht auf HTTP zurückfallen. Ihr Browser weigert sich zu verbinden. Beginnen Sie mit 5 Minuten, überprüfen Sie alles und erhöhen Sie dann auf 1 Jahr.
Wie Sie prüfen, ob HSTS aktiv ist
curl -sI https://yourdomain.com | grep -i strict-transport
# Erwartet: strict-transport-security: max-age=63072000; includeSubDomains
In Chrome DevTools: Netzwerk-Tab → Anfrage anklicken → Header → nach Strict-Transport-Security suchen.
Häufig gestellte Fragen
Ersetzt HSTS HTTP→HTTPS-Weiterleitungen?
Nein. HSTS und Weiterleitungen dienen unterschiedlichen Zwecken. Die Weiterleitung fängt die erste HTTP-Anfrage ab. HSTS weist den Browser an, nie wieder HTTP-Anfragen zu stellen (nach dem ersten HTTPS-Besuch). Sie brauchen beides.
Kann HSTS Probleme verursachen?
Ja, wenn HTTPS ausfällt. Mit einem langen max-age weigern sich Browser, als Fallback über HTTP zu verbinden. Deshalb sollten Sie mit einem kurzen max-age beginnen und ihn erst erhöhen, wenn HTTPS stabil läuft.
Brauche ich HSTS, wenn ich Cloudflare verwende?
Cloudflare handhabt die Besucher→Cloudflare-Verbindung, aber HSTS auf Ihrem Origin-Server schützt die gesamte Kette. Aktivieren Sie HSTS über das Cloudflare-Dashboard für die Edge und auf Ihrem Origin-Server, wenn Sie den Full (Strict) Modus verwenden.
Was ist der Unterschied zwischen HSTS und der CSP-Direktive upgrade-insecure-requests?
upgrade-insecure-requests weist den Browser an, Unterressourcen (Bilder, Skripte) über HTTPS statt HTTP zu laden — um Mixed Content zu beheben. HSTS weist den Browser an, für die gesamte Domain immer HTTPS zu verwenden. Sie lösen unterschiedliche Probleme und können zusammen verwendet werden.