Java 10: Integrierte Root-Zertifikate (JEP 319) – TLS out of the box in OpenJDK
JEP 319 – Root Certificates
Das Problem vor Java 10
- Der
cacertsKeystore in OpenJDK-Builds war leer. - Ohne Root-CAs schlagen TLS-Verbindungen fehl (z. B.
HTTPS-Requests, Maven-Downloads, Docker-Image-Pulls). - Entwickler mussten manuell Zertifikate importieren (
keytool -importcert) oder Oracle JDK nutzen.
Die Lösung: Oracle Java SE Root CA Program
Oracle hat seine Root-CA-Zertifikate unter einer Open-Source-freundlichen Lizenz freigegeben. OpenJDK-Builds enthalten nun standardmäßig einen befüllten cacerts-Store.
Was enthält der cacerts-Store?
- Root-Zertifikate von CAs, die das Oracle Java SE Root CA Agreement unterzeichnet haben.
- Gängige öffentliche CAs (DigiCert, GlobalSign, GoDaddy, Let's Encrypt Root-CAs via Cross-Signs, …).
- Nicht registrierte CAs werden in nachfolgenden Releases nachgepflegt.
Auswirkungen
| Aspekt | Vor Java 10 (OpenJDK) | Ab Java 10 (OpenJDK) |
|---|---|---|
| TLS/HTTPS | Schlägt fehl (keine Trust-Anchors) | Funktioniert out-of-the-box |
| Maven/Gradle Dependency Download | Erfordert manuellen cacerts-Import | Funktioniert sofort |
| Container Images (OpenJDK Basis) | Zusätzliche Layer für CAs nötig | Schlankere Images, weniger Aufwand |
| Unterschied Oracle JDK ↔ OpenJDK | Groß (Zertifikate, Fonts, Installer) | Deutlich kleiner |
Verwaltung
Der cacerts-Store liegt unter $JAVA_HOME/lib/security/cacerts (Passwort: changeit). Sie können ihn wie gewohnt mit keytool verwalten:
# Zertifikat anzeigen
keytool -list -keystore $JAVA_HOME/lib/security/cacerts
# Eigenes CA-Zertifikat hinzufügen
keytool -importcert -alias myca -file myca.pem -keystore $JAVA_HOME/lib/security/cacerts
Fazit
Ein entscheidender Schritt zur Gleichstellung von OpenJDK und Oracle JDK. Für Cloud-Native, Container- und CI/CD-Umgebungen entfällt ein häufiger Stolperstein.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList