本仓库包含三个示例,演示了在 Apache Camel 中使用 X25519MLKEM768 混合密钥交换进行 后量子密码学 (PQC) TLS 1.3 握手。
X25519MLKEM768 将经典的 X25519 椭圆曲线 Diffie-Hellman 与 ML-KEM-768(一种基于后量子格的密钥封装机制,NIST FIPS 203)相结合。两种算法同时运行,即使其中一种被破解,安全性也得以维持。
| 示例 | JDK | TLS 提供者 | 方法 |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (JDK 原生) | JEP 527 为 JDK 内置的 TLS 栈添加了 PQC 命名组 |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | BCJSSE 用于 PQC TLS,JDK 通过 JEP 496 提供原生 ML-KEM 原语 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | BCJSSE 替代 SunJSSE,立即提供 PQC TLS 支持 |
所有三个示例完全通过 camel.ssl.* 属性配置,并使用 X25519MLKEM768 执行自包含的 TLS 1.3 握手以实现后量子密钥交换,启动时验证,并可通过 REST 端点按需使用。
pqc-ssl-context)使用 JDK 内置的 SunJSSE 提供者,该提供者通过 JDK 27 中的 JEP 527 获得 PQC TLS 支持。
camel.ssl.namedGroups=X25519MLKEM768,x25519 配置 PQCcamel.ssl.selfSigned=true)SSLParameters.setNamedGroups()(标准 JDK API)设置命名组pqc-kem-jdk24)使用 BouncyCastle 的 JSSE 提供者 (BCJSSE) 为 JDK 24 带来 PQC TLS 支持。虽然 JDK 24 包含原生 ML-KEM 作为独立加密原语(JEP 496),但它未在 TLS 栈中公开 PQC 命名组。BCJSSE 弥补了这一差距。
camel.ssl.provider=BCJSSE 和 camel.ssl.namedGroups=X25519MLKEM768,secp256r1 配置 PQCcamel.ssl.selfSigned=true)/api/verify-kem 端点演示了 JDK 24 的原生 javax.crypto.KEM API 并进行跨提供者互操作测试pqc-ssl-context-jdk21)使用 BouncyCastle 的 JSSE 提供者 (BCJSSE) 为 JDK 21 带来 PQC TLS 支持,无需等待 JDK 27。
camel.ssl.provider=BCJSSE 和 camel.ssl.namedGroups=X25519MLKEM768,secp256r1 配置 PQCcamel.ssl.selfSigned=true)jdk.tls.disabledAlgorithms 中移除 ECDHcd 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
当 PQC TLS 握手成功时,所有三个示例都会返回 "pqcVerified": true。
如果您在使用 Camel 时遇到任何问题或有任何反馈,请告诉我们。
我们也非常欢迎贡献者,所以加入我们 :-)
Camel 骑士团!
| 方面 | JDK 27 原生 | JDK 24 + BouncyCastle | JDK 21 + BouncyCastle |
|---|
| JDK 要求 | JDK 27 EA | JDK 24+ | JDK 21+ |
| TLS 提供者 | SunJSSE | BCJSSE 1.83 | BCJSSE 1.83 |
| PQC 机制 | JEP 527(内置) | BouncyCastle TLS 库 | BouncyCastle TLS 库 |
| 原生 ML-KEM (KEM API) | 是 | 是 (JEP 496) | 否 |
| 配置 | camel.ssl.* 属性 | camel.ssl.* 属性 | camel.ssl.* 属性 |
| 证书管理 | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true |
| REST 端口 | 8443 (HTTPS) | 8443 (HTTPS) | 8443 (HTTPS) |
| 额外依赖 | 无(JDK 原生) | bcprov, bctls | bcprov, bctls |
| JDK 版本 | ML-KEM KEM API | TLS 中的 PQC | 方法 |
|---|
| 21 | 否 | 是(通过 BouncyCastle) | pqc-ssl-context-jdk21 - BCJSSE 提供 PQC TLS 支持 |
| 24 | 是 (JEP 496) | 是(通过 BouncyCastle) | pqc-kem-jdk24 - BCJSSE 用于 TLS,JDK 拥有原生 ML-KEM 原语 |
| 27 | 是 | 是(原生) | pqc-ssl-context - JEP 527 为 SunJSSE 添加 PQC |