HSTS in Contao konfigurieren

HTTP Strict Transport Security in Contao aktivieren — per Symfony EventSubscriber oder .htaccess. Mit Preload-Voraussetzungen und schrittweiser max-age-Erhöhung.

Contao · Schritt für Schritt

HTTP Strict Transport Security in Contao

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 Contao setzen Sie HSTS am saubersten über einen Symfony EventSubscriber. Alternativ funktioniert die public/.htaccess auf Apache-Servern. Voraussetzung ist ein funktionierendes HTTPS mit gültigem TLS-Zertifikat auf der Domain und allen Subdomains.

HSTS-Implementierung in Contao

Der EventSubscriber ist der empfohlene Weg — er funktioniert unabhängig vom Webserver und überlebt Contao-Updates. Die .htaccess ist der schnelle Fallback für Apache-Hosting.

EventSubscriber (empfohlen)
HstsSubscriber.php Empfohlen
<?php
// src/EventSubscriber/HstsSubscriber.php

namespace App\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(): array {
    return [KernelEvents::RESPONSE => ['onResponse', 0]];
  }

  public function onResponse(ResponseEvent $event): void {
    $response = $event->getResponse();
    $response->headers->set(
      'Strict-Transport-Security',
      'max-age=31536000; includeSubDomains; preload'
    );
  }
}
.htaccess
public/.htaccess Fallback
# public/.htaccess — HSTS-Fallback
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
Schrittweises max-age erhöhen

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 Contao-Cache und prüfen den Header per curl. Der HSTS-Header wird nur über HTTPS ausgeliefert — bei HTTP-Anfragen ignoriert der Browser ihn.

Terminal Verifizierung
# Cache leeren
vendor/bin/contao-console cache:clear

# 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 Contao

contao-console cache:clear vergessen

Nach Änderungen am EventSubscriber muss vendor/bin/contao-console cache:clear ausgeführt werden. Ohne Cache-Invalidierung wird der neue Subscriber nicht geladen und der HSTS-Header fehlt weiterhin.

HSTS ohne funktionierendes HTTPS auf Subdomains

Mit includeSubDomains müssen alle Subdomains gültiges HTTPS haben. Prüfen Sie vor der Aktivierung, ob z.B. mail.ihre-domain.de oder staging.ihre-domain.de erreichbar sind.

Contao-Extension überschreibt HSTS-Konfiguration

Manche Extensions registrieren eigene Response-Listener. Prüfen Sie die Subscriber-Priorität mit debug:event-dispatcher kernel.response. Ein Subscriber mit höherer Priorität kann Ihren HSTS-Header überschreiben.

Compliance-Relevanz

HSTS ist eine Grundvoraussetzung für Transportsicherheit und wird von allen relevanten Compliance-Frameworks gefordert.

NIS2Art. 21(h) — Einsatz von Kryptografie und Verschlüsselung
PCI DSS 4.0Anforderung 4.2.1 — Starke Kryptografie zum Schutz bei Datenübertragung
BSIIT-Grundschutz — Transportverschlüsselung erzwingen

Wie steht Ihre Domain bei HSTS?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.