This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 57f2ba57996 CAMEL-20774: Add more SSL configuration to camel.ssl in
camel-main
57f2ba57996 is described below
commit 57f2ba579966e56df8fbe1773541325ef465023c
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Aug 17 10:48:38 2024 +0200
CAMEL-20774: Add more SSL configuration to camel.ssl in camel-main
---
.../main/camel-main-configuration-metadata.json | 4 +
.../main/SSLConfigurationPropertiesConfigurer.java | 21 +++++
.../camel-main-configuration-metadata.json | 4 +
core/camel-main/src/main/docs/main.adoc | 6 +-
.../org/apache/camel/main/BaseMainSupport.java | 6 ++
.../camel/main/SSLConfigurationProperties.java | 99 ++++++++++++++++++++++
6 files changed, 139 insertions(+), 1 deletion(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
index 8185a3cf983..bf0867f90cd 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
@@ -276,10 +276,14 @@
{ "name": "camel.server.uploadEnabled", "description": "Whether to enable
file upload via HTTP (not intended for production use). This functionality is
for development to be able to reload Camel routes and code with source changes
(if reload is enabled). If enabled then you can upload\/delete files via HTTP
PUT\/DELETE on context-path: \/q\/upload\/{name}. You must also configure the
uploadSourceDir option.", "sourceType":
"org.apache.camel.main.HttpServerConfigurationProperties", "t [...]
{ "name": "camel.server.uploadSourceDir", "description": "Source directory
when upload is enabled.", "sourceType":
"org.apache.camel.main.HttpServerConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
{ "name": "camel.server.useGlobalSslContextParameters", "description":
"Whether to use global SSL configuration for securing the embedded HTTP
server.", "sourceType":
"org.apache.camel.main.HttpServerConfigurationProperties", "type": "boolean",
"javaType": "boolean", "defaultValue": "false" },
+ { "name": "camel.ssl.certAlias", "description": "An optional certificate
alias to use. This is useful when the keystore has multiple certificates.",
"sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type":
"string", "javaType": "java.lang.String" },
{ "name": "camel.ssl.clientAuthentication", "description": "Sets the
configuration for server-side client-authentication requirements",
"sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type":
"string", "javaType": "java.lang.String", "defaultValue": "NONE", "enum": [
"NONE", "WANT", "REQUIRE" ] },
{ "name": "camel.ssl.enabled", "description": "Enables SSL in your Camel
application.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "boolean",
"javaType": "boolean", "defaultValue": "false" },
{ "name": "camel.ssl.keyStore", "description": "Sets the SSL Keystore
resource.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties",
"type": "string", "javaType": "java.lang.String" },
{ "name": "camel.ssl.keystorePassword", "description": "Sets the SSL
Keystore password.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
+ { "name": "camel.ssl.provider", "description": "To use a specific provider
for creating SSLContext. The list of available providers returned by
java.security.Security.getProviders() or null to use the highest priority
provider implementing the secure socket protocol.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
+ { "name": "camel.ssl.secureSocketProtocol", "description": "The optional
protocol for the secure sockets created by the SSLContext. See Appendix A in
the
https:\/\/docs.oracle.com\/en\/java\/javase\/17\/docs\/specs\/security\/standard-names.html
for information about standard protocol names.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String", "defaultValue": "TLSv1.3" },
+ { "name": "camel.ssl.sessionTimeout", "description": "Timeout in seconds
to use for SSLContext. The default is 24 hours.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "integer",
"javaType": "int", "defaultValue": 86400 },
{ "name": "camel.ssl.trustStore", "description": "Sets the SSL Truststore
resource.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties",
"type": "string", "javaType": "java.lang.String" },
{ "name": "camel.ssl.trustStorePassword", "description": "Sets the SSL
Truststore password.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
{ "name": "camel.threadpool.allowCoreThreadTimeOut", "description": "Sets
default whether to allow core threads to timeout", "sourceType":
"org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "boolean",
"javaType": "java.lang.Boolean", "defaultValue": "false" },
diff --git
a/core/camel-main/src/generated/java/org/apache/camel/main/SSLConfigurationPropertiesConfigurer.java
b/core/camel-main/src/generated/java/org/apache/camel/main/SSLConfigurationPropertiesConfigurer.java
index 232fc0f405a..42026a97b48 100644
---
a/core/camel-main/src/generated/java/org/apache/camel/main/SSLConfigurationPropertiesConfigurer.java
+++
b/core/camel-main/src/generated/java/org/apache/camel/main/SSLConfigurationPropertiesConfigurer.java
@@ -23,6 +23,8 @@ public class SSLConfigurationPropertiesConfigurer extends
org.apache.camel.suppo
public boolean configure(CamelContext camelContext, Object obj, String
name, Object value, boolean ignoreCase) {
org.apache.camel.main.SSLConfigurationProperties target =
(org.apache.camel.main.SSLConfigurationProperties) obj;
switch (ignoreCase ? name.toLowerCase() : name) {
+ case "certalias":
+ case "certAlias": target.setCertAlias(property(camelContext,
java.lang.String.class, value)); return true;
case "clientauthentication":
case "clientAuthentication":
target.setClientAuthentication(property(camelContext, java.lang.String.class,
value)); return true;
case "enabled": target.setEnabled(property(camelContext,
boolean.class, value)); return true;
@@ -30,6 +32,11 @@ public class SSLConfigurationPropertiesConfigurer extends
org.apache.camel.suppo
case "keyStore": target.setKeyStore(property(camelContext,
java.lang.String.class, value)); return true;
case "keystorepassword":
case "keystorePassword":
target.setKeystorePassword(property(camelContext, java.lang.String.class,
value)); return true;
+ case "provider": target.setProvider(property(camelContext,
java.lang.String.class, value)); return true;
+ case "securesocketprotocol":
+ case "secureSocketProtocol":
target.setSecureSocketProtocol(property(camelContext, java.lang.String.class,
value)); return true;
+ case "sessiontimeout":
+ case "sessionTimeout": target.setSessionTimeout(property(camelContext,
int.class, value)); return true;
case "truststore":
case "trustStore": target.setTrustStore(property(camelContext,
java.lang.String.class, value)); return true;
case "truststorepassword":
@@ -41,6 +48,8 @@ public class SSLConfigurationPropertiesConfigurer extends
org.apache.camel.suppo
@Override
public Class<?> getOptionType(String name, boolean ignoreCase) {
switch (ignoreCase ? name.toLowerCase() : name) {
+ case "certalias":
+ case "certAlias": return java.lang.String.class;
case "clientauthentication":
case "clientAuthentication": return java.lang.String.class;
case "enabled": return boolean.class;
@@ -48,6 +57,11 @@ public class SSLConfigurationPropertiesConfigurer extends
org.apache.camel.suppo
case "keyStore": return java.lang.String.class;
case "keystorepassword":
case "keystorePassword": return java.lang.String.class;
+ case "provider": return java.lang.String.class;
+ case "securesocketprotocol":
+ case "secureSocketProtocol": return java.lang.String.class;
+ case "sessiontimeout":
+ case "sessionTimeout": return int.class;
case "truststore":
case "trustStore": return java.lang.String.class;
case "truststorepassword":
@@ -60,6 +74,8 @@ public class SSLConfigurationPropertiesConfigurer extends
org.apache.camel.suppo
public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
org.apache.camel.main.SSLConfigurationProperties target =
(org.apache.camel.main.SSLConfigurationProperties) obj;
switch (ignoreCase ? name.toLowerCase() : name) {
+ case "certalias":
+ case "certAlias": return target.getCertAlias();
case "clientauthentication":
case "clientAuthentication": return target.getClientAuthentication();
case "enabled": return target.isEnabled();
@@ -67,6 +83,11 @@ public class SSLConfigurationPropertiesConfigurer extends
org.apache.camel.suppo
case "keyStore": return target.getKeyStore();
case "keystorepassword":
case "keystorePassword": return target.getKeystorePassword();
+ case "provider": return target.getProvider();
+ case "securesocketprotocol":
+ case "secureSocketProtocol": return target.getSecureSocketProtocol();
+ case "sessiontimeout":
+ case "sessionTimeout": return target.getSessionTimeout();
case "truststore":
case "trustStore": return target.getTrustStore();
case "truststorepassword":
diff --git
a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index 8185a3cf983..bf0867f90cd 100644
---
a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++
b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -276,10 +276,14 @@
{ "name": "camel.server.uploadEnabled", "description": "Whether to enable
file upload via HTTP (not intended for production use). This functionality is
for development to be able to reload Camel routes and code with source changes
(if reload is enabled). If enabled then you can upload\/delete files via HTTP
PUT\/DELETE on context-path: \/q\/upload\/{name}. You must also configure the
uploadSourceDir option.", "sourceType":
"org.apache.camel.main.HttpServerConfigurationProperties", "t [...]
{ "name": "camel.server.uploadSourceDir", "description": "Source directory
when upload is enabled.", "sourceType":
"org.apache.camel.main.HttpServerConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
{ "name": "camel.server.useGlobalSslContextParameters", "description":
"Whether to use global SSL configuration for securing the embedded HTTP
server.", "sourceType":
"org.apache.camel.main.HttpServerConfigurationProperties", "type": "boolean",
"javaType": "boolean", "defaultValue": "false" },
+ { "name": "camel.ssl.certAlias", "description": "An optional certificate
alias to use. This is useful when the keystore has multiple certificates.",
"sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type":
"string", "javaType": "java.lang.String" },
{ "name": "camel.ssl.clientAuthentication", "description": "Sets the
configuration for server-side client-authentication requirements",
"sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type":
"string", "javaType": "java.lang.String", "defaultValue": "NONE", "enum": [
"NONE", "WANT", "REQUIRE" ] },
{ "name": "camel.ssl.enabled", "description": "Enables SSL in your Camel
application.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "boolean",
"javaType": "boolean", "defaultValue": "false" },
{ "name": "camel.ssl.keyStore", "description": "Sets the SSL Keystore
resource.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties",
"type": "string", "javaType": "java.lang.String" },
{ "name": "camel.ssl.keystorePassword", "description": "Sets the SSL
Keystore password.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
+ { "name": "camel.ssl.provider", "description": "To use a specific provider
for creating SSLContext. The list of available providers returned by
java.security.Security.getProviders() or null to use the highest priority
provider implementing the secure socket protocol.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
+ { "name": "camel.ssl.secureSocketProtocol", "description": "The optional
protocol for the secure sockets created by the SSLContext. See Appendix A in
the
https:\/\/docs.oracle.com\/en\/java\/javase\/17\/docs\/specs\/security\/standard-names.html
for information about standard protocol names.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String", "defaultValue": "TLSv1.3" },
+ { "name": "camel.ssl.sessionTimeout", "description": "Timeout in seconds
to use for SSLContext. The default is 24 hours.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "integer",
"javaType": "int", "defaultValue": 86400 },
{ "name": "camel.ssl.trustStore", "description": "Sets the SSL Truststore
resource.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties",
"type": "string", "javaType": "java.lang.String" },
{ "name": "camel.ssl.trustStorePassword", "description": "Sets the SSL
Truststore password.", "sourceType":
"org.apache.camel.main.SSLConfigurationProperties", "type": "string",
"javaType": "java.lang.String" },
{ "name": "camel.threadpool.allowCoreThreadTimeOut", "description": "Sets
default whether to allow core threads to timeout", "sourceType":
"org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "boolean",
"javaType": "java.lang.Boolean", "defaultValue": "false" },
diff --git a/core/camel-main/src/main/docs/main.adoc
b/core/camel-main/src/main/docs/main.adoc
index 69712f305d9..9e1131bd1f8 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -245,15 +245,19 @@ The camel.trace supports 14 options, which are listed
below.
=== Camel SSL configurations
-The camel.ssl supports 6 options, which are listed below.
+The camel.ssl supports 10 options, which are listed below.
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
+| *camel.ssl.certAlias* | An optional certificate alias to use. This is useful
when the keystore has multiple certificates. | | String
| *camel.ssl.clientAuthentication* | Sets the configuration for server-side
client-authentication requirements | NONE | String
| *camel.ssl.enabled* | Enables SSL in your Camel application. | false |
boolean
| *camel.ssl.keyStore* | Sets the SSL Keystore resource. | | String
| *camel.ssl.keystorePassword* | Sets the SSL Keystore password. | | String
+| *camel.ssl.provider* | To use a specific provider for creating SSLContext.
The list of available providers returned by
java.security.Security.getProviders() or null to use the highest priority
provider implementing the secure socket protocol. | | String
+| *camel.ssl.secureSocketProtocol* | The optional protocol for the secure
sockets created by the SSLContext. See Appendix A in the
\https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
for information about standard protocol names. | TLSv1.3 | String
+| *camel.ssl.sessionTimeout* | Timeout in seconds to use for SSLContext. The
default is 24 hours. | 86400 | int
| *camel.ssl.trustStore* | Sets the SSL Truststore resource. | | String
| *camel.ssl.trustStorePassword* | Sets the SSL Truststore password. | |
String
|===
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index b3df528b469..8af86884a33 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -1683,6 +1683,12 @@ public abstract class BaseMainSupport extends
BaseService {
scsp.setClientAuthentication(sslConfig.getClientAuthentication());
SSLContextParameters sslContextParameters = new SSLContextParameters();
+ sslContextParameters.setProvider(sslConfig.getProvider());
+
sslContextParameters.setSecureSocketProtocol(sslConfig.getSecureSocketProtocol());
+ sslContextParameters.setCertAlias(sslConfig.getCertAlias());
+ if (sslConfig.getSessionTimeout() > 0) {
+ sslContextParameters.setSessionTimeout("" +
sslConfig.getSessionTimeout());
+ }
sslContextParameters.setKeyManagers(kmp);
sslContextParameters.setTrustManagers(tmp);
sslContextParameters.setServerParameters(scsp);
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
b/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
index 3792fd54469..e6b91466f68 100644
---
a/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
+++
b/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
@@ -20,6 +20,9 @@ import org.apache.camel.spi.BootstrapCloseable;
import org.apache.camel.spi.Configurer;
import org.apache.camel.spi.Metadata;
+import javax.net.ssl.SSLContext;
+import java.security.Security;
+
/**
* Global configuration for SSL.
*/
@@ -30,6 +33,14 @@ public class SSLConfigurationProperties implements
BootstrapCloseable {
@Metadata
private boolean enabled;
+ @Metadata(label = "advanced")
+ private String provider;
+ @Metadata(label = "advanced", defaultValue = "TLSv1.3")
+ private String secureSocketProtocol;
+ @Metadata(label = "advanced")
+ private String certAlias;
+ @Metadata(label = "advanced", defaultValue = "86400")
+ private int sessionTimeout;
@Metadata
private String keyStore;
@Metadata
@@ -65,6 +76,56 @@ public class SSLConfigurationProperties implements
BootstrapCloseable {
this.enabled = enabled;
}
+ public String getProvider() {
+ return provider;
+ }
+
+ /**
+ * To use a specific provider for creating SSLContext.
+ *
+ * The list of available providers returned by
java.security.Security.getProviders() or null to use the highest
+ * priority provider implementing the secure socket protocol.
+ */
+ public void setProvider(String provider) {
+ this.provider = provider;
+ }
+
+ public String getSecureSocketProtocol() {
+ return secureSocketProtocol;
+ }
+
+ /**
+ * The optional protocol for the secure sockets created by the SSLContext.
+ *
+ * See Appendix A in the
https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
for
+ * information about standard protocol names.
+ */
+ public void setSecureSocketProtocol(String secureSocketProtocol) {
+ this.secureSocketProtocol = secureSocketProtocol;
+ }
+
+ public String getCertAlias() {
+ return certAlias;
+ }
+
+ /**
+ * An optional certificate alias to use. This is useful when the keystore
has multiple certificates.
+ */
+ public void setCertAlias(String certAlias) {
+ this.certAlias = certAlias;
+ }
+
+ public int getSessionTimeout() {
+ return sessionTimeout;
+ }
+
+ /**
+ * Timeout in seconds to use for SSLContext. The default is 24 hours.
+ */
+ public void setSessionTimeout(int sessionTimeout) {
+ this.sessionTimeout = sessionTimeout;
+ }
+
public String getKeyStore() {
return keyStore;
}
@@ -128,6 +189,44 @@ public class SSLConfigurationProperties implements
BootstrapCloseable {
return this;
}
+ /**
+ * To use a specific provider for creating SSLContext.
+ *
+ * The list of available providers returned by
java.security.Security.getProviders() or null to use the highest
+ * priority provider implementing the secure socket protocol.
+ */
+ public SSLConfigurationProperties withProvider(String provider) {
+ this.provider = provider;
+ return this;
+ }
+
+ /**
+ * The optional protocol for the secure sockets created by the SSLContext.
+ *
+ * See Appendix A in the
https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
for
+ * information about standard protocol names.
+ */
+ public SSLConfigurationProperties withSecureSocketProtocol(String
secureSocketProtocol) {
+ this.secureSocketProtocol = secureSocketProtocol;
+ return this;
+ }
+
+ /**
+ * An optional certificate alias to use. This is useful when the keystore
has multiple certificates.
+ */
+ public SSLConfigurationProperties withCertAlias(String certAlias) {
+ this.certAlias = certAlias;
+ return this;
+ }
+
+ /**
+ * Timeout in seconds to use for SSLContext. The default is 24 hours.
+ */
+ public SSLConfigurationProperties withSessionTimeoutCertAlias(int
sessionTimeout) {
+ this.sessionTimeout = sessionTimeout;
+ return this;
+ }
+
/**
* Sets the SSL Keystore.
*/