TLS und Zertifikate in Spring Boot
HTTPS im Embedded Tomcat konfigurieren -- mit server.ssl Properties, Reverse-Proxy-Integration und sicheren Cipher-Suites.
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.
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.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_SHA384Das 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.
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 -- 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();
}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.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;
}
}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.
# 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.
Wie steht Ihre Domain bei TLS & Zertifikate?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.