HSTS für Apache konfigurieren
Schritt-für-Schritt-Anleitung: HTTP Strict Transport Security auf Apache einrichten — per .htaccess oder VirtualHost, auch ohne Root-Zugriff auf Shared Hosting.
HSTS auf Apache HTTP Server
HTTP Strict Transport Security (HSTS) schützt Ihre Besucher vor SSL-Stripping-Angriffen, indem der Browser ausschließlich verschlüsselte Verbindungen akzeptiert. Apache unterstützt HSTS über das mod_headers-Modul — konfigurierbar per .htaccess (Shared Hosting) oder direkt in der VirtualHost-Konfiguration (eigener Server).
Die Besonderheit von Apache: Auf Shared Hosting haben Sie keinen Zugriff auf die Serverkonfiguration. Mit .htaccess und dem IfModule-Wrapper können Sie HSTS trotzdem sicher aktivieren — ohne Risiko eines 500-Fehlers, falls mod_headers nicht geladen ist. HSTS ist mit 15 von 166 Punkten ein wichtiger Faktor im Wolf-Agents Web Security Check.
HSTS-Header in Apache konfigurieren
Apache bietet zwei Wege: .htaccess für Shared Hosting ohne Root-Zugriff, oder direkt in der VirtualHost-Konfiguration für eigene Server. Beide Varianten nutzen mod_headers — das Modul muss aktiviert sein.
# .htaccess — HSTS aktivieren
<IfModule mod_headers.c>
# Nur über HTTPS senden (wichtig!)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>
# TLS-Versionen einschränken (nur TLS 1.2 und 1.3)
SSLProtocol -all +TLSv1.2 +TLSv1.3
# HTTP → HTTPS Redirect (erforderlich für HSTS)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule> IfModule-Wrapper? Auf Shared Hosting kann mod_headers oder mod_rewrite deaktiviert sein. Ohne IfModule-Wrapper würde Apache einen 500 Internal Server Error zurückgeben. Der Wrapper stellt sicher, dass die Konfiguration nur geladen wird, wenn das Modul verfügbar ist.
env=HTTPS? Die env=HTTPS-Bedingung sendet den HSTS-Header nur über verschlüsselte Verbindungen. RFC 6797 verlangt, dass Browser HSTS über HTTP ignorieren — env=HTTPS ist trotzdem Best Practice für saubere Header-Hygiene.
Konfiguration testen und verifizieren
Prüfen Sie zunächst, ob mod_headers geladen ist, und verifizieren Sie dann den HSTS-Header. Auf eigenem Server können Sie die Apache-Konfiguration vor dem Reload auf Syntaxfehler prüfen.
# 1. Prüfen ob mod_headers geladen ist
apachectl -M | grep headers
# Erwartete Ausgabe: headers_module (shared)
# 2. Konfiguration prüfen und Apache neu laden (eigener Server)
apachectl configtest && sudo systemctl reload apache2
# 3. HSTS-Header prüfen
curl -sI https://example.com | grep -i strict
# Erwartete Ausgabe:
# Strict-Transport-Security: max-age=31536000; includeSubDomains; preload Häufige Fehlerquellen
Header erscheint nicht
Prüfen Sie, ob mod_headers aktiviert ist: a2enmod headers && systemctl restart apache2. Auf Shared Hosting den Provider kontaktieren.
500 Internal Server Error
Fehlt der IfModule-Wrapper und mod_headers ist nicht geladen, gibt Apache einen 500-Fehler zurück. Wrapper nachrüsten oder Modul aktivieren.
Redirect-Loop
Die RewriteCond %{HTTPS} off-Bedingung verhindert Endlosschleifen. Falls der Proxy bereits HTTPS terminiert, prüfen Sie X-Forwarded-Proto.
.htaccess-Datei — ein Restart ist nicht nötig. Apache liest .htaccess bei jedem Request neu. HSTS Preload beantragen
Wenn HSTS stabil funktioniert, registrieren Sie Ihre Domain bei der HSTS Preload List. Browser erzwingen dann HTTPS ab dem allerersten Besuch — der HTTP-zu-HTTPS-Redirect auf Port 80 greift trotzdem weiterhin für ältere Clients und Bots.
max-age ≥ 31536000, includeSubDomains und preload enthält mail., ftp. und interne Subdomains. Wie steht Ihre Domain bei HSTS?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Kann ich HSTS auf Apache ohne Root-Zugriff konfigurieren?
Ja — über die .htaccess-Datei. Voraussetzung ist, dass Ihr Hosting-Provider mod_headers aktiviert hat und AllowOverride FileInfo erlaubt. Das ist bei den meisten Shared-Hosting-Anbietern der Fall. Prüfen Sie mit „apachectl -M | grep headers", ob mod_headers geladen ist.
Was bewirkt env=HTTPS in der Apache-HSTS-Konfiguration?
Die env=HTTPS-Bedingung stellt sicher, dass der HSTS-Header nur über verschlüsselte Verbindungen gesendet wird. RFC 6797 verlangt, dass Browser HSTS-Header über unverschlüsselte Verbindungen ignorieren — env=HTTPS ist daher Best Practice, auch wenn Browser den Header ohnehin verwerfen würden.
Warum IfModule mod_headers.c statt direkter Konfiguration?
Der IfModule-Wrapper verhindert Apache-Startfehler, wenn mod_headers nicht geladen ist. Auf Shared Hosting kann das Modul deaktiviert sein — ohne IfModule würde Apache einen 500-Fehler zurückgeben. Bei eigenem Server mit garantiert geladenem mod_headers ist der Wrapper optional.
Wie richte ich den HTTP-zu-HTTPS-Redirect auf Apache ein?
Mit mod_rewrite in der .htaccess: RewriteEngine On, RewriteCond %{HTTPS} off, RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]. Alternativ können Sie in der VirtualHost-Konfiguration für Port 80 direkt Redirect permanent / https://example.com/ verwenden.
Was ist der Unterschied zwischen Header set und Header always set?
Header set fügt den Header nur bei erfolgreichen Responses hinzu. Header always set setzt den Header auch bei Fehlerseiten (404, 500) — wichtig für HSTS, da Angreifer Fehlerseiten für Downgrade-Angriffe nutzen könnten.
Funktioniert HSTS auf Apache mit Let's Encrypt?
Ja, problemlos. Let's Encrypt stellt kostenlose SSL-Zertifikate aus, die alle Voraussetzungen für HSTS erfüllen. Certbot konfiguriert den HTTPS-Redirect automatisch (certbot --apache). Den HSTS-Header müssen Sie manuell hinzufügen — Certbot setzt diesen nicht automatisch.