
Post-Quanten-Kryptographie (PQC) TLS-1.3-Beispiele mit Apache Camel unter Verwendung des X25519MLKEM768-Hybrid-Schlüsselaustauschs auf JDK 21 (BouncyCastle) und JDK 27 (nativ)
Dieses Repository enthält drei Beispiele, die Post-Quanten-Kryptografie (PQC) TLS 1.3-Handshakes mit Apache Camel unter Verwendung des X25519MLKEM768-Hybridschlüsselaustauschs demonstrieren.
X25519MLKEM768 kombiniert klassisches X25519-Elliptische-Kurven-Diffie-Hellman mit ML-KEM-768, einem Post-Quanten-gitterbasierten Schlüsselverkapselungsmechanismus (NIST FIPS 203). Beide Algorithmen laufen zusammen, sodass die Sicherheit auch dann gewahrt bleibt, wenn einer von ihnen gebrochen wird.
| Beispiel | JDK | TLS-Anbieter | Ansatz |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (JDK-nativ) | JEP 527 fügt dem integrierten TLS-Stack des JDK PQC-Named-Groups hinzu |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | BCJSSE für PQC-TLS, JDK verfügt über native ML-KEM-Primitive via JEP 496 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | BCJSSE ersetzt SunJSSE, um PQC-TLS-Unterstützung bereits heute bereitzustellen |
Alle drei Beispiele werden vollständig über camel.ssl.*-Eigenschaften konfiguriert und führen einen eigenständigen TLS 1.3-Handshake unter Verwendung von X25519MLKEM768 für den Post-Quanten-Schlüsselaustausch durch, der beim Start verifiziert und bei Bedarf über REST-Endpunkte verfügbar ist.
pqc-ssl-context)Verwendet den in das JDK integrierten SunJSSE-Anbieter, der in JDK 27 durch JEP 527 PQC-TLS-Unterstützung erhält.
camel.ssl.namedGroups=X25519MLKEM768,x25519camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() gesetzt (Standard-JDK-API)pqc-kem-jdk24)Verwendet den JSSE-Anbieter von BouncyCastle (BCJSSE), um PQC-TLS-Unterstützung in JDK 24 zu bringen. Während JDK 24 natives ML-KEM als eigenständiges Krypto-Primitiv enthält (JEP 496), stellt es keine PQC-Named-Groups in seinem TLS-Stack bereit. BCJSSE schließt diese Lücke.
camel.ssl.provider=BCJSSE und camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)/api/verify-kem-Endpunkt demonstriert die native javax.crypto.KEM-API von JDK 24 mit providerübergreifenden Interop-Testspqc-ssl-context-jdk21)Verwendet den JSSE-Anbieter von BouncyCastle (BCJSSE), um PQC-TLS-Unterstützung in JDK 21 zu bringen, ohne auf JDK 27 warten zu müssen.
camel.ssl.provider=BCJSSE und camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)ECDH aus jdk.tls.disabledAlgorithms zu entfernencd pqc-ssl-context
sdk use java 27.ea.11-open
mvn clean compile exec:exec
curl -k https://localhost:8443/api/verify-pqc
cd pqc-kem-jdk24
sdk use java 24.0.1-tem
mvn clean compile exec:exec
curl -k https://localhost:8443/api/verify-pqc
curl -k https://localhost:8443/api/verify-kem
cd pqc-ssl-context-jdk21
sdk use java 21.0.10-tem
mvn clean compile exec:exec
curl -k https://localhost:8443/api/verify-pqc
Alle drei geben "pqcVerified": true zurück, wenn der PQC-TLS-Handshake erfolgreich ist.
Wenn du auf ein Problem mit Camel stößt oder Feedback hast, dann bitte lass es uns wissen.
Wir lieben auch Mitwirkende, also mach mit :-)
Die Camel-Reiter!
| Aspekt | JDK 27 nativ | JDK 24 + BouncyCastle | JDK 21 + BouncyCastle |
|---|
| JDK-Anforderung | JDK 27 EA | JDK 24+ | JDK 21+ |
| TLS-Anbieter | SunJSSE | BCJSSE 1.83 | BCJSSE 1.83 |
| PQC-Mechanismus | JEP 527 (integriert) | BouncyCastle-TLS-Bibliothek | BouncyCastle-TLS-Bibliothek |
| Natives ML-KEM (KEM-API) | Ja | Ja (JEP 496) | Nein |
| Konfiguration | camel.ssl.*-Eigenschaften | camel.ssl.*-Eigenschaften | camel.ssl.*-Eigenschaften |
| Zertifikatsverwaltung | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true |
| REST-Port | 8443 (HTTPS) | 8443 (HTTPS) | 8443 (HTTPS) |
| Zusätzliche Abhängigkeiten | Keine (JDK-nativ) | bcprov, bctls | bcprov, bctls |
| JDK-Version | ML-KEM KEM-API | PQC in TLS | Ansatz |
|---|
| 21 | Nein | Ja (über BouncyCastle) | pqc-ssl-context-jdk21 - BCJSSE bietet PQC-TLS-Unterstützung |
| 24 | Ja (JEP 496) | Ja (über BouncyCastle) | pqc-kem-jdk24 - BCJSSE für TLS, JDK verfügt über native ML-KEM-Primitive |
| 27 | Ja | Ja (nativ) | pqc-ssl-context - JEP 527 fügt SunJSSE PQC hinzu |