HSTS in Drupal konfigurieren
HTTP Strict Transport Security in Drupal aktivieren — per seckit-Checkbox, EventSubscriber oder .htaccess. Mit Preload-Voraussetzungen und schrittweiser max-age-Erhöhung.
HTTP Strict Transport Security in Drupal
HTTP Strict Transport Security (HSTS) weist Browser an, ausschließlich verschlüsselte HTTPS-Verbindungen zu verwenden. Der Header verhindert SSL-Stripping-Angriffe und ist mit 15 von 166 Punkten ein wichtiger Faktor im Wolf-Agents Web Security Check.
In Drupal aktivieren Sie HSTS am schnellsten über das seckit-Modul — eine Checkbox genügt. Alternativ setzen Sie den Header per EventSubscriber oder .htaccess. Voraussetzung ist ein funktionierendes HTTPS mit gültigem TLS-Zertifikat.
HSTS-Implementierung in Drupal
seckit bietet die einfachste HSTS-Konfiguration — alles per Admin-UI. Für Teams, die keinen Modul-Overhead wollen, ist der EventSubscriber oder die .htaccess der direkte Weg.
# seckit HSTS: /admin/config/system/seckit → Tab "HSTS"
# Checkboxen aktivieren:
✓ HTTP Strict Transport Security
Max-Age: 31536000
✓ includeSubDomains
✓ preload
# Speichern → drush cr <?php
// modules/custom/security_headers/src/EventSubscriber/HstsSubscriber.php
namespace Drupal\security_headers\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class HstsSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [KernelEvents::RESPONSE => ['onResponse', 0]];
}
public function onResponse(ResponseEvent $event) {
$response = $event->getResponse();
$response->headers->set(
'Strict-Transport-Security',
'max-age=31536000; includeSubDomains; preload'
);
}
} # .htaccess — HSTS-Fallback
# ACHTUNG: Core-Updates überschreiben die .htaccess!
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule> Starten Sie mit max-age=300 (5 Minuten) zum Testen. Erhöhen Sie dann auf 604800 (1 Woche) und schließlich auf 31536000 (1 Jahr). So können Sie bei Problemen schnell zurückrudern.
Verifizierung
Nach der Konfiguration leeren Sie den Drupal-Cache und prüfen den Header per curl. Der HSTS-Header wird nur über HTTPS ausgeliefert — bei HTTP-Anfragen ignoriert der Browser ihn.
# Cache leeren
drush cr
# HSTS-Header prüfen
curl -sI https://ihre-domain.de | grep -i strict-transport-security
# Erwartete Ausgabe:
# strict-transport-security: max-age=31536000; includeSubDomains; preload Häufige Fehler bei HSTS in Drupal
drush cr vergessen — Änderung nicht aktiv
Nach seckit-Konfigurationsänderungen oder einem neuen EventSubscriber ist ein Cache Rebuild mit drush cr zwingend erforderlich. Ohne Cache Rebuild sehen Sie weiterhin den alten (oder keinen) HSTS-Header.
HSTS ohne funktionierendes HTTPS
HSTS ohne gültiges TLS-Zertifikat sperrt Besucher aus. Der Browser weigert sich, die Seite über HTTP zu laden, zeigt aber auch einen Zertifikatsfehler. Aktivieren Sie HSTS erst, wenn HTTPS auf der Domain und allen Subdomains funktioniert.
Drupal Core-Update überschreibt .htaccess
Bei composer update drupal/core wird die .htaccess überschrieben. Ihre HSTS-Konfiguration geht verloren. Nutzen Sie seckit oder den EventSubscriber — beide sind update-sicher.
Compliance-Relevanz
HSTS ist eine Grundvoraussetzung für Transportsicherheit und wird von allen relevanten Compliance-Frameworks gefordert.
Wie steht Ihre Domain bei HSTS?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.