TLS und Zertifikate in Spring Boot

HTTPS im Embedded Tomcat konfigurieren -- mit server.ssl Properties, Reverse-Proxy-Integration und sicheren Cipher-Suites.

Spring Boot · Schritt für Schritt

TLS-Konfiguration in Spring Boot

TLS (Transport Layer Security) verschluesselt die Kommunikation zwischen Browser und Server. Ohne HTTPS sind alle uebertragenen Daten -- Passwoerter, Cookies, API-Keys -- im Klartext lesbar. TLS ist mit 4 von 166 Punkten im Wolf-Agents Web Security Check bewertet.

Spring Boot unterstuetzt TLS direkt im Embedded Tomcat über server.ssl.* Properties. In Produktionsumgebungen laeuft Spring Boot typischerweise hinter einem Reverse Proxy (nginx, Caddy), der die TLS-Terminierung uebernimmt. In beiden Faellen müssen Sie sicherstellen, dass nur TLS 1.2 und 1.3 mit sicheren Cipher-Suites aktiv sind.

1Schritt 1 von 4

TLS im Embedded Tomcat aktivieren

Konfigurieren Sie TLS über die server.ssl.* Properties in application.yml. Verwenden Sie PKCS12-Keystores (nicht das veraltete JKS-Format) und beschraenken Sie die erlaubten Protokolle auf TLS 1.2 und 1.3. Speichern Sie das Keystore-Passwort niemals im Code -- verwenden Sie Umgebungsvariablen.

application.ymlProduktiv
# application.yml -- TLS-Konfiguration
server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: ${SSL_KEYSTORE_PASSWORD}
    key-store-type: PKCS12
    key-alias: server
    # TLS 1.2 und 1.3 erzwingen
    protocol: TLS
    enabled-protocols: TLSv1.3,TLSv1.2
    # Sichere Cipher Suites
    ciphers:
      - TLS_AES_256_GCM_SHA384
      - TLS_AES_128_GCM_SHA256
      - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
PKCS12 statt JKS

Das JKS-Format (Java KeyStore) ist proprietaer und seit Java 9 nicht mehr der Standard. Verwenden Sie PKCS12 (.p12) -- es ist der Industriestandard und wird von allen Tools unterstuetzt.

2Schritt 2 von 4

Hinter Reverse Proxy konfigurieren

In Produktionsumgebungen laeuft Spring Boot typischerweise hinter nginx oder Caddy, die TLS terminieren. Konfigurieren Sie forward-headers-strategy: native, damit Spring Boot die X-Forwarded-*-Header des Proxys auswertet und korrekte HTTPS-URLs generiert.

application.yml + SecurityConfig.javaProduktiv
# application.yml -- Hinter Reverse Proxy
server:
  port: 8080
  forward-headers-strategy: native
  tomcat:
    remoteip:
      remote-ip-header: X-Forwarded-For
      protocol-header: X-Forwarded-Proto

// SecurityConfig.java -- HTTPS erzwingen
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http)
        throws Exception {
    http.requiresChannel(channel -> channel
        .anyRequest().requiresSecure());
    return http.build();
}
Der Wolf-Agents Web Security Check prüft TLS-Version, Zertifikat und Cipher-Suites und bewertet sie mit bis zu 4 Punkten.
3Schritt 3 von 4

HTTP auf HTTPS umleiten

Wenn Spring Boot direkt TLS terminiert, müssen Sie einen zweiten Connector für HTTP konfigurieren, der auf HTTPS weiterleitet. Bei einer Reverse-Proxy-Konfiguration uebernimmt der Proxy die Weiterleitung.

HttpToHttpsRedirectConfig.javaProduktiv
// HttpToHttpsRedirectConfig.java
@Configuration
public class HttpToHttpsRedirectConfig {

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat =
            new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context ctx) {
                SecurityConstraint sc = new SecurityConstraint();
                sc.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection =
                    new SecurityCollection();
                collection.addPattern("/*");
                sc.addCollection(collection);
                ctx.addConstraint(sc);
            }
        };
        tomcat.addAdditionalTomcatConnectors(
            httpConnector());
        return tomcat;
    }

    private Connector httpConnector() {
        Connector connector = new Connector(
            "org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setRedirectPort(8443);
        return connector;
    }
}
4Schritt 4 von 4

TLS-Konfiguration verifizieren

Prüfen Sie die TLS-Konfiguration mit openssl und curl. Stellen Sie sicher, dass nur TLS 1.2 und 1.3 aktiv sind und dass der HTTP-Redirect auf HTTPS funktioniert.

TerminalVerifizierung
# TLS-Konfiguration pruefen
openssl s_client -connect localhost:8443 -tls1_3 < /dev/null 2>/dev/null | \
  grep -E "Protocol|Cipher"

# Erwartete Ausgabe:
Protocol  : TLSv1.3
Cipher    : TLS_AES_256_GCM_SHA384

# HTTP-Redirect pruefen:
curl -sI http://localhost:8080

# Erwartete Ausgabe:
HTTP/1.1 302
Location: https://localhost:8443/

Häufige Fehler bei TLS in Spring Boot

Keystore-Passwort im application.yml

Das Keystore-Passwort darf niemals hardcoded in application.yml stehen. Verwenden Sie Umgebungsvariablen (${SSL_KEYSTORE_PASSWORD}) oder Spring Cloud Vault für Secrets-Management.

X-Forwarded-Proto fehlt hinter Reverse Proxy

Ohne forward-headers-strategy: native erkennt Spring Boot nicht, dass der Client HTTPS verwendet. Links und Redirects zeigen dann auf HTTP statt HTTPS. HSTS wird ebenfalls nicht korrekt gesetzt.

JKS-Keystore statt PKCS12

Das JKS-Format ist veraltet und Java-spezifisch. PKCS12 ist der Standard. Konvertieren Sie bestehende JKS-Keystores mit keytool -importkeystore -srckeystore old.jks -destkeystore new.p12 -deststoretype PKCS12.

TLS 1.0/1.1 noch aktiviert

Die Standard-Java-TLS-Konfiguration erlaubt je nach Version noch TLS 1.0 und 1.1. Beschraenken Sie enabled-protocols explizit auf TLSv1.3,TLSv1.2.

Compliance-Relevanz

TLS-Verschluesselung ist eine Grundanforderung aller Compliance-Frameworks und gesetzlich vorgeschrieben für personenbezogene Daten.

PCI DSS 4.0 -- Requirement 4.1 fordert starke TLS-Verschluesselung für alle Übertragungen von Karteninhaberdaten.
NIS2 -- Art. 21(e) fordert Verschluesselung bei der Übertragung sensibler Daten.
DSGVO -- Art. 32 fordert Verschluesselung als technische Massnahme zum Schutz personenbezogener Daten.

Wie steht Ihre Domain bei TLS & Zertifikate?

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