Was ist HSTS?
HSTS (HTTP Strict Transport Security) ist ein Sicherheitsmechanismus, mit dem eine Website den Browser anweist: „Verbinde dich mit dieser Website ausschließlich über HTTPS.“ Bei einer Website mit aktivem HSTS stuft der Browser HTTP-Verbindungsversuche automatisch auf HTTPS hoch — eine HTTP-Anfrage erreicht den Server gar nicht erst.
Wie funktioniert HSTS?
- Der Browser besucht Ihre Website zum ersten Mal über HTTPS
- Der Server sendet den Header
Strict-Transport-Security - Der Browser speichert diese Information für die in
max-ageangegebene Dauer - Bei späteren Besuchen werden HTTP-Links automatisch auf HTTPS hochgestuft
# Grundlegender HSTS-Header
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Häufige HSTS-Fehler
Fehler 1: ERR_SSL_PROTOCOL_ERROR (durch HSTS verursacht)
Läuft bei aktivem HSTS das SSL-Zertifikat ab oder tritt ein anderes Problem auf, weigert sich der Browser, die Website auch nur über HTTP zu öffnen. Anders als bei einem gewöhnlichen SSL-Fehler bekommt der Nutzer die Option „Trotzdem fortfahren“ nicht angezeigt.
Lösung
- Erneuern Sie das SSL-Zertifikat umgehend — ohne gültiges Zertifikat ist eine Website mit HSTS vollständig unerreichbar
- In Chrome können Sie unter
chrome://net-internals/#hstsden HSTS-Eintrag der Domain löschen (nur in Ihrem eigenen Browser)
Fehler 2: Subdomains ohne SSL, aber includeSubDomains aktiv
Die Direktive includeSubDomains erzwingt HTTPS auf allen Subdomains. Hat eine Subdomain kein SSL, ist sie nicht mehr erreichbar.
Lösung
- Installieren Sie auf allen Subdomains ein SSL-Zertifikat (mit Wildcard SSL in einem Schritt)
- Oder entfernen Sie die Direktive
includeSubDomains
Fehler 3: HSTS wird über eine HTTP-Seite gesendet
Der HSTS-Header ist nur in HTTPS-Antworten gültig. Ein in einer HTTP-Antwort gesendeter HSTS-Header wird von Browsern ignoriert.
Richtige Konfiguration
# Nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # Zuerst auf HTTPS weiterleiten
}
server {
listen 443 ssl;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # HSTS hier
}
Fehler 4: max-age zu kurz oder null
max-age=0 deaktiviert HSTS. Sehr kurze Zeiträume (wenige Stunden) schwächen die Sicherheit.
Empfohlene Einstellungen
| Phase | max-age | Erläuterung |
|---|---|---|
| Test | 300 (5 Minuten) | Sicherer Test bei der Ersteinrichtung |
| Übergang | 604800 (1 Woche) | Erhöhen, wenn keine Probleme auftreten |
| Produktion | 31536000 (1 Jahr) | Standardwert für den Produktivbetrieb |
| Preload | 31536000+ (1 Jahr+) | Minimum für die HSTS-Preload-Liste |
Was ist HSTS Preload?
HSTS Preload nimmt Ihre Domain in die fest eingebaute HSTS-Liste von Chrome (und anderen Browsern) auf. Dadurch findet selbst beim ersten Besuch kein HTTP-Verbindungsversuch statt.
Voraussetzungen für Preload
- Gültiges SSL-Zertifikat
- Weiterleitung HTTP → HTTPS
max-agevon mindestens 31536000 (1 Jahr)- Direktive
includeSubDomains - Direktive
preload
Anmeldung: Unter hstspreload.org können Sie Ihre Domain einreichen.
⚠️ Warnung: Die Entfernung aus der HSTS-Preload-Liste kann Monate dauern. Reichen Sie Ihre Domain nur ein, wenn Sie sich sicher sind.
HSTS deaktivieren
So deaktivieren Sie HSTS im Notfall:
# max-age=0 senden
add_header Strict-Transport-Security "max-age=0" always;
# Browser löschen den HSTS-Eintrag beim nächsten Besuch der Website über HTTPS
HSTS-Konfiguration je Server
# Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Apache (.htaccess oder VirtualHost)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# IIS (web.config)
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
</customHeaders>
Fazit
HSTS ist ein leistungsfähiger Mechanismus, der die Sicherheit Ihrer Website deutlich erhöht. Bei fehlerhafter Konfiguration kann er jedoch zu Erreichbarkeitsproblemen führen. Stellen Sie vor der Aktivierung von HSTS sicher, dass alle Subdomains über ein SSL-Zertifikat verfügen, erhöhen Sie den max-age-Wert schrittweise und testen Sie Ihre Konfiguration gründlich, bevor Sie die Domain in die Preload-Liste aufnehmen lassen.