This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git


The following commit(s) were added to refs/heads/main by this push:
     new e4e7b075bae CAMEL-23162 - Post-Quantum Cryptography (PQC) readiness: 
Add PQC readiness support to Camel Spring Boot SSL auto-configuration (#1705)
e4e7b075bae is described below

commit e4e7b075bae3c4507de79f557f731d9bcfcce94a
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Mar 9 19:11:12 2026 +0100

    CAMEL-23162 - Post-Quantum Cryptography (PQC) readiness: Add PQC readiness 
support to Camel Spring Boot SSL auto-configuration (#1705)
    
    Align with Camel core changes (CAMEL-23154, CAMEL-23158, CAMEL-23159) by
    exposing namedGroups, namedGroupsFilter, signatureSchemes, and
    signatureSchemesFilter in CamelSSLConfigurationProperties and wiring them
    through CamelSSLAutoConfiguration, enabling Spring Boot users to configure
    post-quantum TLS key exchange groups and signature algorithms.
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../boot/security/CamelSSLAutoConfiguration.java   | 35 +++++++++++++
 .../security/CamelSSLConfigurationProperties.java  | 58 ++++++++++++++++++++++
 .../security/CamelSSLAutoConfigurationTest.java    | 47 ++++++++++++++++++
 3 files changed, 140 insertions(+)

diff --git 
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfiguration.java
 
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfiguration.java
index cd62c5bba97..823f3392e35 100644
--- 
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfiguration.java
+++ 
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfiguration.java
@@ -56,6 +56,9 @@ public class CamelSSLAutoConfiguration {
         // override with any camel.ssl props
         SSLContextParameters config = new 
SSLContextBuilder(sslContext).certAlias(properties.getCertAlias())
                 
.cipherSuites(properties.getCipherSuites()).cipherSuitesFilter(properties.getCipherSuitesFilter())
+                
.namedGroups(properties.getNamedGroups()).namedGroupsFilter(properties.getNamedGroupsFilter())
+                .signatureSchemes(properties.getSignatureSchemes())
+                .signatureSchemesFilter(properties.getSignatureSchemesFilter())
                 
.clientParameters(properties.getClientParameters()).keyManagers(properties.getKeyManagers())
                 
.provider(properties.getProvider()).secureRandom(properties.getSecureRandom())
                 .secureSocketProtocol(properties.getSecureSocketProtocol())
@@ -114,6 +117,10 @@ public class CamelSSLAutoConfiguration {
         copy.setCertAlias(sslContextParameters.getCertAlias());
         copy.setCipherSuites(sslContextParameters.getCipherSuites());
         
copy.setCipherSuitesFilter(sslContextParameters.getCipherSuitesFilter());
+        copy.setNamedGroups(sslContextParameters.getNamedGroups());
+        copy.setNamedGroupsFilter(sslContextParameters.getNamedGroupsFilter());
+        copy.setSignatureSchemes(sslContextParameters.getSignatureSchemes());
+        
copy.setSignatureSchemesFilter(sslContextParameters.getSignatureSchemesFilter());
         copy.setClientParameters(sslContextParameters.getClientParameters());
         copy.setKeyManagers(sslContextParameters.getKeyManagers());
         copy.setProvider(sslContextParameters.getProvider());
@@ -156,6 +163,34 @@ public class CamelSSLAutoConfiguration {
             return this;
         }
 
+        public SSLContextBuilder namedGroups(NamedGroupsParameters 
namedGroups) {
+            if (namedGroups != null) {
+                sslContextParameters.setNamedGroups(namedGroups);
+            }
+            return this;
+        }
+
+        public SSLContextBuilder namedGroupsFilter(FilterParameters 
namedGroupsFilter) {
+            if (namedGroupsFilter != null) {
+                sslContextParameters.setNamedGroupsFilter(namedGroupsFilter);
+            }
+            return this;
+        }
+
+        public SSLContextBuilder signatureSchemes(SignatureSchemesParameters 
signatureSchemes) {
+            if (signatureSchemes != null) {
+                sslContextParameters.setSignatureSchemes(signatureSchemes);
+            }
+            return this;
+        }
+
+        public SSLContextBuilder signatureSchemesFilter(FilterParameters 
signatureSchemesFilter) {
+            if (signatureSchemesFilter != null) {
+                
sslContextParameters.setSignatureSchemesFilter(signatureSchemesFilter);
+            }
+            return this;
+        }
+
         public SSLContextBuilder clientParameters(SSLContextClientParameters 
clientParameters) {
             if (clientParameters != null) {
                 sslContextParameters.setClientParameters(clientParameters);
diff --git 
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLConfigurationProperties.java
 
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLConfigurationProperties.java
index 456d8807482..133e11c99a1 100644
--- 
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLConfigurationProperties.java
+++ 
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSSLConfigurationProperties.java
@@ -19,11 +19,13 @@ package org.apache.camel.spring.boot.security;
 import org.apache.camel.support.jsse.CipherSuitesParameters;
 import org.apache.camel.support.jsse.FilterParameters;
 import org.apache.camel.support.jsse.KeyManagersParameters;
+import org.apache.camel.support.jsse.NamedGroupsParameters;
 import org.apache.camel.support.jsse.SSLContextClientParameters;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.support.jsse.SSLContextServerParameters;
 import org.apache.camel.support.jsse.SecureRandomParameters;
 import org.apache.camel.support.jsse.SecureSocketProtocolsParameters;
+import org.apache.camel.support.jsse.SignatureSchemesParameters;
 import org.apache.camel.support.jsse.TrustManagersParameters;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -104,6 +106,30 @@ public class CamelSSLConfigurationProperties {
      */
     private FilterParameters cipherSuitesFilter;
 
+    /**
+     * The optional explicitly configured named groups (key exchange groups) 
for this configuration. Named groups control
+     * which key exchange algorithms are available during the TLS handshake, 
including post-quantum hybrid groups such as
+     * X25519MLKEM768.
+     */
+    private NamedGroupsParameters namedGroups;
+
+    /**
+     * The optional named groups filter configuration for this configuration.
+     */
+    private FilterParameters namedGroupsFilter;
+
+    /**
+     * The optional explicitly configured signature schemes for this 
configuration. Signature schemes control which
+     * signature algorithms are available during the TLS handshake, including 
post-quantum signature algorithms such as
+     * ML-DSA.
+     */
+    private SignatureSchemesParameters signatureSchemes;
+
+    /**
+     * The optional signature schemes filter configuration for this 
configuration.
+     */
+    private FilterParameters signatureSchemesFilter;
+
     /**
      * The optional explicitly configured secure socket protocol names for 
this configuration.
      */
@@ -215,6 +241,38 @@ public class CamelSSLConfigurationProperties {
         this.cipherSuitesFilter = cipherSuitesFilter;
     }
 
+    public NamedGroupsParameters getNamedGroups() {
+        return this.namedGroups;
+    }
+
+    public void setNamedGroups(NamedGroupsParameters namedGroups) {
+        this.namedGroups = namedGroups;
+    }
+
+    public FilterParameters getNamedGroupsFilter() {
+        return this.namedGroupsFilter;
+    }
+
+    public void setNamedGroupsFilter(FilterParameters namedGroupsFilter) {
+        this.namedGroupsFilter = namedGroupsFilter;
+    }
+
+    public SignatureSchemesParameters getSignatureSchemes() {
+        return this.signatureSchemes;
+    }
+
+    public void setSignatureSchemes(SignatureSchemesParameters 
signatureSchemes) {
+        this.signatureSchemes = signatureSchemes;
+    }
+
+    public FilterParameters getSignatureSchemesFilter() {
+        return this.signatureSchemesFilter;
+    }
+
+    public void setSignatureSchemesFilter(FilterParameters 
signatureSchemesFilter) {
+        this.signatureSchemesFilter = signatureSchemesFilter;
+    }
+
     public SecureSocketProtocolsParameters getSecureSocketProtocols() {
         return this.secureSocketProtocols;
     }
diff --git 
a/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
 
b/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
index 75f901f26d0..39350fb5216 100644
--- 
a/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
+++ 
b/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
@@ -219,6 +219,53 @@ public class CamelSSLAutoConfigurationTest {
                 });
     }
 
+    @Test
+    public void checkSSLPQCPropertiesPresent() {
+        new ApplicationContextRunner()
+                
.withConfiguration(AutoConfigurations.of(CamelSSLAutoConfiguration.class, 
CamelAutoConfiguration.class))
+                .withPropertyValues(
+                        "camel.ssl.cert-alias=pqc-test",
+                        "camel.ssl.named-groups.named-group[0]=X25519MLKEM768",
+                        "camel.ssl.named-groups.named-group[1]=x25519",
+                        "camel.ssl.named-groups-filter.include[0]=.*MLKEM.*",
+                        "camel.ssl.named-groups-filter.exclude[0]=.*legacy.*",
+                        
"camel.ssl.signature-schemes.signature-scheme[0]=ML-DSA",
+                        
"camel.ssl.signature-schemes.signature-scheme[1]=ed25519",
+                        
"camel.ssl.signature-schemes-filter.include[0]=.*DSA.*",
+                        
"camel.ssl.signature-schemes-filter.exclude[0]=.*SHA1.*")
+                .run(context -> {
+                    SSLContextParameters contextParams = 
context.getBean(SSLContextParameters.class);
+                    assertNotNull(contextParams);
+                    assertEquals("pqc-test", contextParams.getCertAlias());
+
+                    // verify named groups (PQC key exchange)
+                    assertNotNull(contextParams.getNamedGroups());
+                    assertEquals(2, 
contextParams.getNamedGroups().getNamedGroup().size());
+                    assertEquals("X25519MLKEM768", 
contextParams.getNamedGroups().getNamedGroup().get(0));
+                    assertEquals("x25519", 
contextParams.getNamedGroups().getNamedGroup().get(1));
+
+                    // verify named groups filter
+                    assertNotNull(contextParams.getNamedGroupsFilter());
+                    assertEquals(1, 
contextParams.getNamedGroupsFilter().getInclude().size());
+                    assertEquals(".*MLKEM.*", 
contextParams.getNamedGroupsFilter().getInclude().get(0));
+                    assertEquals(1, 
contextParams.getNamedGroupsFilter().getExclude().size());
+                    assertEquals(".*legacy.*", 
contextParams.getNamedGroupsFilter().getExclude().get(0));
+
+                    // verify signature schemes (PQC signatures)
+                    assertNotNull(contextParams.getSignatureSchemes());
+                    assertEquals(2, 
contextParams.getSignatureSchemes().getSignatureScheme().size());
+                    assertEquals("ML-DSA", 
contextParams.getSignatureSchemes().getSignatureScheme().get(0));
+                    assertEquals("ed25519", 
contextParams.getSignatureSchemes().getSignatureScheme().get(1));
+
+                    // verify signature schemes filter
+                    assertNotNull(contextParams.getSignatureSchemesFilter());
+                    assertEquals(1, 
contextParams.getSignatureSchemesFilter().getInclude().size());
+                    assertEquals(".*DSA.*", 
contextParams.getSignatureSchemesFilter().getInclude().get(0));
+                    assertEquals(1, 
contextParams.getSignatureSchemesFilter().getExclude().size());
+                    assertEquals(".*SHA1.*", 
contextParams.getSignatureSchemesFilter().getExclude().get(0));
+                });
+    }
+
     @Test
     public void checkNoSSLPropertiesPresent() {
         new ApplicationContextRunner()

Reply via email to