HSTS in Spring Boot konfigurieren

HTTP Strict Transport Security per SecurityFilterChain aktivieren -- mit max-age, includeSubDomains, Preload und schrittweisem Rollout.

Spring Boot · Schritt für Schritt

HSTS in Spring Boot konfigurieren

HTTP Strict Transport Security (HSTS) weist Browser an, ausschliesslich verschluesselte 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.

Spring Security setzt HSTS nicht automatisch. Sie müssen den Header explizit per httpStrictTransportSecurity()-DSL in der SecurityFilterChain aktivieren. Wichtig: Spring Security sendet den HSTS-Header nur über HTTPS-Verbindungen -- auf localhost:8080 ohne TLS erscheint er nicht.

1 Schritt 1 von 3

HSTS in SecurityFilterChain aktivieren

Die httpStrictTransportSecurity()-DSL bietet drei Parameter: maxAgeInSeconds() für die Gueltigkeitsdauer, includeSubDomains() für Subdomains und preload() für die Browser-Preload-Liste. Starten Sie mit einem kurzen max-age zum Testen.

SecurityConfig.java Produktiv
// SecurityConfig.java -- HSTS konfigurieren
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http)
        throws Exception {

    http.headers(headers -> headers
        .httpStrictTransportSecurity(hsts -> hsts
            // 1 Jahr max-age (Minimum fuer Preload)
            .maxAgeInSeconds(31536000)
            .includeSubDomains(true)
            .preload(true)
        )
    );

    return http.build();
}
application.yml TLS-Voraussetzung
# application.yml -- HSTS ist NICHT per YAML konfigurierbar
# HSTS muss ueber SecurityFilterChain gesetzt werden.
# Spring Boot bietet keine application.yml-Property fuer HSTS.

# TLS aktivieren (Voraussetzung fuer HSTS)
server:
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: changeit
    key-store-type: PKCS12
Schrittweises max-age erhoehen

Starten Sie mit maxAgeInSeconds(300) (5 Minuten) zum Testen. Erhoehen Sie dann auf 604800 (1 Woche) und schliesslich auf 31536000 (1 Jahr). So können Sie bei Problemen schnell zurückrudern.

2 Schritt 2 von 3

Verifizierung mit curl

Prüfen Sie den HSTS-Header auf der produktiven Domain. Der Header muss in der HTTPS-Antwort vorhanden sein -- bei HTTP-Anfragen wird er vom Browser ignoriert und von Spring Security nicht gesendet.

Terminal Verifizierung
# HSTS-Header pruefen (HTTPS erforderlich)
curl -sI https://ihre-domain.de | grep -i strict-transport-security

# Erwartete Ausgabe:
strict-transport-security: max-age=31536000; includeSubDomains; preload

# Achtung: Auf localhost ohne TLS erscheint der Header NICHT
# Spring Security sendet HSTS nur ueber HTTPS-Verbindungen
Verwenden Sie den Wolf-Agents Web Security Check für eine vollständige HSTS-Analyse inklusive Preload-Bereitschaft.
3 Schritt 3 von 3

Preload beantragen

Nach erfolgreicher Verifizierung können Sie Ihre Domain bei hstspreload.org zur Aufnahme in die Browser-Preload-Liste einreichen. Voraussetzungen: max-age mindestens 31536000, includeSubDomains und preload müssen gesetzt sein.

HSTS Preload ist irreversibel. Einmal in der Preload-Liste kann die Entfernung Monate dauern. Stellen Sie absolut sicher, dass HTTPS auf der Hauptdomain und allen Subdomains funktioniert, bevor Sie preload verwenden.

Häufige Fehler bei HSTS in Spring Boot

HSTS auf localhost nicht sichtbar

Spring Security sendet HSTS nur über HTTPS. Auf localhost:8080 ohne TLS erscheint der Header nicht. Testen Sie HSTS auf einer Staging-Umgebung mit gueltigem TLS-Zertifikat oder aktivieren Sie TLS lokal per server.ssl in application.yml.

@Order falsch -- HSTS wird nicht angewandt

Bei mehreren SecurityFilterChain-Beans muss die HSTS-Konfiguration in der FilterChain mit der richtigen @Order sein. Ohne explizite Order kann eine andere FilterChain die Konfiguration überschreiben.

Actuator-Endpoints ohne HSTS

Wenn Actuator auf einem separaten Management-Port laeuft (management.server.port), verwendet er eine eigene Security-Konfiguration. HSTS muss dort separat konfiguriert werden.

Reverse Proxy setzt bereits HSTS

Wenn Nginx oder ein Load Balancer vor Spring Boot HSTS setzt, können doppelte Header entstehen. Entscheiden Sie, ob der Proxy oder Spring Boot den Header setzen soll -- nicht beide.

Compliance-Relevanz

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

PCI DSS 4.0Anforderung 4.2.1 -- Starke Kryptografie zum Schutz bei Übertragung
NIS2Art. 21(h) -- Einsatz von Kryptografie und Verschluesselung
BSIAPP.3.1 -- Transportverschluesselung erzwingen

Wie steht Ihre Domain bei HSTS?

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