Kurz erklärt
HSTS (HTTP Strict Transport Security) ist ein Security-Header, der Browser anweist, eine Website ausschließlich über HTTPS aufzurufen – selbst wenn der Nutzer http:// eingibt oder einem HTTP-Link folgt. HSTS schützt vor SSL-Stripping-Angriffen und eliminiert unsichere HTTP-Verbindungen vollständig.
Wie funktioniert HSTS?
Beim ersten HTTPS-Besuch sendet der Server den HSTS-Header:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Der Browser merkt sich diese Anweisung für die in max-age angegebene Zeit (hier: 2 Jahre). Jeder nachfolgende Zugriff erfolgt automatisch über HTTPS – bevor überhaupt eine HTTP-Anfrage gesendet wird.
HSTS-Direktiven
max-age: Dauer in Sekunden, für die Browser HSTS erzwingen sollen
max-age=31536000 – 1 Jahr (Minimum für Preload)
max-age=63072000 – 2 Jahre (empfohlen)
includeSubDomains: HTTPS-Erzwingung gilt auch für alle Subdomains
Strict-Transport-Security: max-age=63072000; includeSubDomains
Wichtig: Nur aktivieren, wenn alle Subdomains HTTPS unterstützen!
preload: Berechtigt zur Aufnahme in HSTS-Preload-Liste
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
HSTS Preload-Liste
Die HSTS Preload List ist eine in Chrome, Firefox, Safari und Edge eingebaute Liste von Domains, die HSTS erzwingen. Vorteil: Schutz ab dem allerersten Besuch – kein Trust-On-First-Use-Problem.
Voraussetzungen für Preload:
max-age mindestens 31536000 (1 Jahr)
includeSubDomains Direktive gesetzt
preload Direktive gesetzt
- Alle Subdomains müssen HTTPS unterstützen
- HTTPS-Redirect von HTTP eingerichtet
Eintrag beantragen: hstspreload.org
Achtung: Austragung dauert Monate – nur aktivieren, wenn HTTPS-Betrieb dauerhaft sicher ist.
SSL-Stripping-Angriffe verhindern
Szenario ohne HSTS:
- Nutzer tippt
example.com (ohne Protokoll) in Adressleiste
- Browser versucht HTTP-Verbindung
- Angreifer im WLAN fängt Verbindung ab, leitet auf gefälschte HTTP-Seite
- Nutzer gibt Passwort ein – Angreifer stiehlt es
Mit HSTS:
- Nutzer tippt
example.com
- Browser hat HSTS-Eintrag gespeichert
- Browser lädt sofort
https://example.com – Angriff scheitert
Schrittweise Einführung
Phase 1: Testen (1 Woche)
Strict-Transport-Security: max-age=300
Niedriges max-age (5 Minuten) erlaubt schnelle Rücknahme bei Problemen.
Phase 2: Staging (2-4 Wochen)
Strict-Transport-Security: max-age=2592000
30 Tage – ausreichend Zeit, um Subdomain-Probleme zu identifizieren.
Phase 3: Produktion
Strict-Transport-Security: max-age=63072000; includeSubDomains
Phase 4: Preload (optional)
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Preload-Eintrag bei hstspreload.org beantragen.
Implementierung
Apache:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</IfModule>
nginx:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Cloudflare: Automatisch aktiviert bei SSL/TLS-Modus “Full (strict)” oder manuell via Page Rules
Nächste Schritte
- HTTPS vollständig einrichten (alle Subdomains)
- HSTS-Header mit niedriger max-age testen
- Nach erfolgreichen Tests max-age auf 2 Jahre erhöhen
includeSubDomains hinzufügen (wenn alle Subdomains HTTPS unterstützen)
- Optional: Preload-Liste-Eintrag beantragen