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.git
The following commit(s) were added to refs/heads/main by this push:
new c30964cbea8c CAMEL-23314: camel-opensearch - add SSLContextParameters
support for TLS configuration (#22578)
c30964cbea8c is described below
commit c30964cbea8cee015bc2cee26e94f0dee3db7f2e
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Apr 13 18:09:50 2026 +0200
CAMEL-23314: camel-opensearch - add SSLContextParameters support for TLS
configuration (#22578)
* CAMEL-23314: camel-opensearch - add SSLContextParameters support for TLS
configuration
Signed-off-by: Andrea Cosentino <[email protected]>
* CAMEL-23314: regen catalog and endpoint DSL for new opensearch SSL options
Signed-off-by: Andrea Cosentino <[email protected]>
* CAMEL-23314: regen catalog and endpoint DSL for new opensearch SSL options
Signed-off-by: Andrea Cosentino <[email protected]>
---------
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../camel/catalog/components/opensearch.json | 7 +-
.../opensearch/OpensearchComponentConfigurer.java | 12 +++
.../opensearch/OpensearchEndpointConfigurer.java | 6 ++
.../opensearch/OpensearchEndpointUriFactory.java | 3 +-
.../camel/component/opensearch/opensearch.json | 7 +-
.../component/opensearch/OpensearchComponent.java | 37 +++++++-
.../opensearch/OpensearchConfiguration.java | 16 ++++
.../component/opensearch/OpensearchProducer.java | 10 +-
.../OpensearchSslContextParametersTest.java | 104 +++++++++++++++++++++
.../dsl/OpensearchComponentBuilderFactory.java | 36 +++++++
.../dsl/OpensearchEndpointBuilderFactory.java | 36 +++++++
11 files changed, 267 insertions(+), 7 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opensearch.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opensearch.json
index 1667e714886a..98d51c7a7a2d 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opensearch.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opensearch.json
@@ -36,7 +36,9 @@
"snifferInterval": { "index": 9, "kind": "property", "displayName":
"Sniffer Interval", "group": "advanced", "label": "advanced", "required":
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": 300000, "description": "The interval
between consecutive ordinary sniff executions in milliseconds. Will be honoured
when sniffOnFailure is disabled or when there are no failures between
consecutive sniff executions" },
"enableSSL": { "index": 10, "kind": "property", "displayName": "Enable
SSL", "group": "security", "label": "security", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Enable SSL" },
"password": { "index": 11, "kind": "property", "displayName": "Password",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "description": "Password for authenticating" },
- "user": { "index": 12, "kind": "property", "displayName": "User", "group":
"security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "description": "Basic authenticate user" }
+ "sslContextParameters": { "index": 12, "kind": "property", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"autowired": false, "secret": false, "description": "To configure security
using SSLContextParameters. When configured, this takes precedence over the
certificatePath option." },
+ "useGlobalSslContextParameters": { "index": 13, "kind": "property",
"displayName": "Use Global Ssl Context Parameters", "group": "security",
"label": "security", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Enable usage of global SSL context
parameters." },
+ "user": { "index": 14, "kind": "property", "displayName": "User", "group":
"security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "description": "Basic authenticate user" }
},
"headers": {
"operation": { "index": 0, "kind": "header", "displayName": "", "group":
"producer", "label": "", "required": false, "javaType":
"org.apache.camel.component.opensearch.OpensearchOperation", "enum": [ "Index",
"Update", "Bulk", "GetById", "MultiGet", "MultiSearch", "Delete",
"DeleteIndex", "Search", "Exists", "Ping" ], "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "The
operation to perform", "constantName": "org.apache.camel.component. [...]
@@ -70,6 +72,7 @@
"sniffAfterFailureDelay": { "index": 17, "kind": "parameter",
"displayName": "Sniff After Failure Delay", "group": "advanced", "label":
"advanced", "required": false, "type": "integer", "javaType": "int",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
60000, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "The delay of a sniff
execution scheduled after a failure (in [...]
"snifferInterval": { "index": 18, "kind": "parameter", "displayName":
"Sniffer Interval", "group": "advanced", "label": "advanced", "required":
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": 300000, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "The interval between
consecutive ordinary sniff executions in milliseconds. [...]
"certificatePath": { "index": 19, "kind": "parameter", "displayName":
"Certificate Path", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"supportFileReference": true, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "The certificate that can
be used t [...]
- "enableSSL": { "index": 20, "kind": "parameter", "displayName": "Enable
SSL", "group": "security", "label": "security", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "Enable SSL" }
+ "enableSSL": { "index": 20, "kind": "parameter", "displayName": "Enable
SSL", "group": "security", "label": "security", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "Enable SSL" },
+ "sslContextParameters": { "index": 21, "kind": "parameter", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "To configure security
using SSLContextPara [...]
}
}
diff --git
a/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchComponentConfigurer.java
b/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchComponentConfigurer.java
index 381d3627a46f..17188936c36b 100644
---
a/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchComponentConfigurer.java
+++
b/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchComponentConfigurer.java
@@ -45,6 +45,10 @@ public class OpensearchComponentConfigurer extends
PropertyConfigurerSupport imp
case "snifferInterval":
target.setSnifferInterval(property(camelContext, int.class, value)); return
true;
case "sockettimeout":
case "socketTimeout": target.setSocketTimeout(property(camelContext,
int.class, value)); return true;
+ case "sslcontextparameters":
+ case "sslContextParameters":
target.setSslContextParameters(property(camelContext,
org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true;
+ case "useglobalsslcontextparameters":
+ case "useGlobalSslContextParameters":
target.setUseGlobalSslContextParameters(property(camelContext, boolean.class,
value)); return true;
case "user": target.setUser(property(camelContext,
java.lang.String.class, value)); return true;
default: return false;
}
@@ -80,6 +84,10 @@ public class OpensearchComponentConfigurer extends
PropertyConfigurerSupport imp
case "snifferInterval": return int.class;
case "sockettimeout":
case "socketTimeout": return int.class;
+ case "sslcontextparameters":
+ case "sslContextParameters": return
org.apache.camel.support.jsse.SSLContextParameters.class;
+ case "useglobalsslcontextparameters":
+ case "useGlobalSslContextParameters": return boolean.class;
case "user": return java.lang.String.class;
default: return null;
}
@@ -111,6 +119,10 @@ public class OpensearchComponentConfigurer extends
PropertyConfigurerSupport imp
case "snifferInterval": return target.getSnifferInterval();
case "sockettimeout":
case "socketTimeout": return target.getSocketTimeout();
+ case "sslcontextparameters":
+ case "sslContextParameters": return target.getSslContextParameters();
+ case "useglobalsslcontextparameters":
+ case "useGlobalSslContextParameters": return
target.isUseGlobalSslContextParameters();
case "user": return target.getUser();
default: return null;
}
diff --git
a/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointConfigurer.java
b/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointConfigurer.java
index c867569c5a7c..354e1b33d7ad 100644
---
a/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointConfigurer.java
+++
b/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointConfigurer.java
@@ -55,6 +55,8 @@ public class OpensearchEndpointConfigurer extends
PropertyConfigurerSupport impl
case "snifferInterval":
target.getConfiguration().setSnifferInterval(property(camelContext, int.class,
value)); return true;
case "sockettimeout":
case "socketTimeout":
target.getConfiguration().setSocketTimeout(property(camelContext, int.class,
value)); return true;
+ case "sslcontextparameters":
+ case "sslContextParameters":
target.getConfiguration().setSslContextParameters(property(camelContext,
org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true;
case "usescroll":
case "useScroll":
target.getConfiguration().setUseScroll(property(camelContext, boolean.class,
value)); return true;
case "waitforactiveshards":
@@ -98,6 +100,8 @@ public class OpensearchEndpointConfigurer extends
PropertyConfigurerSupport impl
case "snifferInterval": return int.class;
case "sockettimeout":
case "socketTimeout": return int.class;
+ case "sslcontextparameters":
+ case "sslContextParameters": return
org.apache.camel.support.jsse.SSLContextParameters.class;
case "usescroll":
case "useScroll": return boolean.class;
case "waitforactiveshards":
@@ -142,6 +146,8 @@ public class OpensearchEndpointConfigurer extends
PropertyConfigurerSupport impl
case "snifferInterval": return
target.getConfiguration().getSnifferInterval();
case "sockettimeout":
case "socketTimeout": return
target.getConfiguration().getSocketTimeout();
+ case "sslcontextparameters":
+ case "sslContextParameters": return
target.getConfiguration().getSslContextParameters();
case "usescroll":
case "useScroll": return target.getConfiguration().isUseScroll();
case "waitforactiveshards":
diff --git
a/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointUriFactory.java
b/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointUriFactory.java
index 6c39e1e8f7e8..ee460055346d 100644
---
a/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointUriFactory.java
+++
b/components/camel-opensearch/src/generated/java/org/apache/camel/component/opensearch/OpensearchEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class OpensearchEndpointUriFactory extends
org.apache.camel.support.compo
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Map<String, String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(21);
+ Set<String> props = new HashSet<>(22);
props.add("certificatePath");
props.add("clusterName");
props.add("connectionTimeout");
@@ -43,6 +43,7 @@ public class OpensearchEndpointUriFactory extends
org.apache.camel.support.compo
props.add("sniffAfterFailureDelay");
props.add("snifferInterval");
props.add("socketTimeout");
+ props.add("sslContextParameters");
props.add("useScroll");
props.add("waitForActiveShards");
PROPERTY_NAMES = Collections.unmodifiableSet(props);
diff --git
a/components/camel-opensearch/src/generated/resources/META-INF/org/apache/camel/component/opensearch/opensearch.json
b/components/camel-opensearch/src/generated/resources/META-INF/org/apache/camel/component/opensearch/opensearch.json
index 1667e714886a..98d51c7a7a2d 100644
---
a/components/camel-opensearch/src/generated/resources/META-INF/org/apache/camel/component/opensearch/opensearch.json
+++
b/components/camel-opensearch/src/generated/resources/META-INF/org/apache/camel/component/opensearch/opensearch.json
@@ -36,7 +36,9 @@
"snifferInterval": { "index": 9, "kind": "property", "displayName":
"Sniffer Interval", "group": "advanced", "label": "advanced", "required":
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": 300000, "description": "The interval
between consecutive ordinary sniff executions in milliseconds. Will be honoured
when sniffOnFailure is disabled or when there are no failures between
consecutive sniff executions" },
"enableSSL": { "index": 10, "kind": "property", "displayName": "Enable
SSL", "group": "security", "label": "security", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Enable SSL" },
"password": { "index": 11, "kind": "property", "displayName": "Password",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "description": "Password for authenticating" },
- "user": { "index": 12, "kind": "property", "displayName": "User", "group":
"security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "description": "Basic authenticate user" }
+ "sslContextParameters": { "index": 12, "kind": "property", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"autowired": false, "secret": false, "description": "To configure security
using SSLContextParameters. When configured, this takes precedence over the
certificatePath option." },
+ "useGlobalSslContextParameters": { "index": 13, "kind": "property",
"displayName": "Use Global Ssl Context Parameters", "group": "security",
"label": "security", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Enable usage of global SSL context
parameters." },
+ "user": { "index": 14, "kind": "property", "displayName": "User", "group":
"security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "description": "Basic authenticate user" }
},
"headers": {
"operation": { "index": 0, "kind": "header", "displayName": "", "group":
"producer", "label": "", "required": false, "javaType":
"org.apache.camel.component.opensearch.OpensearchOperation", "enum": [ "Index",
"Update", "Bulk", "GetById", "MultiGet", "MultiSearch", "Delete",
"DeleteIndex", "Search", "Exists", "Ping" ], "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "The
operation to perform", "constantName": "org.apache.camel.component. [...]
@@ -70,6 +72,7 @@
"sniffAfterFailureDelay": { "index": 17, "kind": "parameter",
"displayName": "Sniff After Failure Delay", "group": "advanced", "label":
"advanced", "required": false, "type": "integer", "javaType": "int",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
60000, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "The delay of a sniff
execution scheduled after a failure (in [...]
"snifferInterval": { "index": 18, "kind": "parameter", "displayName":
"Sniffer Interval", "group": "advanced", "label": "advanced", "required":
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": 300000, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "The interval between
consecutive ordinary sniff executions in milliseconds. [...]
"certificatePath": { "index": 19, "kind": "parameter", "displayName":
"Certificate Path", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"supportFileReference": true, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "The certificate that can
be used t [...]
- "enableSSL": { "index": 20, "kind": "parameter", "displayName": "Enable
SSL", "group": "security", "label": "security", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "Enable SSL" }
+ "enableSSL": { "index": 20, "kind": "parameter", "displayName": "Enable
SSL", "group": "security", "label": "security", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "Enable SSL" },
+ "sslContextParameters": { "index": 21, "kind": "parameter", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.opensearch.OpensearchConfiguration",
"configurationField": "configuration", "description": "To configure security
using SSLContextPara [...]
}
}
diff --git
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
index 57cd966dea08..903796d238a2 100644
---
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
+++
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
@@ -23,9 +23,11 @@ import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
+import org.apache.camel.SSLContextParametersAware;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.jsse.SSLContextParameters;
import org.apache.hc.core5.http.HttpHost;
import org.opensearch.client.RestClient;
@@ -33,7 +35,7 @@ import org.opensearch.client.RestClient;
* Represents the component that manages {@link OpensearchEndpoint}.
*/
@Component("opensearch")
-public class OpensearchComponent extends DefaultComponent {
+public class OpensearchComponent extends DefaultComponent implements
SSLContextParametersAware {
@Metadata(label = "advanced", autowired = true)
private RestClient client;
@@ -51,6 +53,10 @@ public class OpensearchComponent extends DefaultComponent {
private String password;
@Metadata(label = "security")
private boolean enableSSL;
+ @Metadata(label = "security")
+ private SSLContextParameters sslContextParameters;
+ @Metadata(label = "security", defaultValue = "false")
+ private boolean useGlobalSslContextParameters;
@Metadata(label = "advanced")
private boolean enableSniffer;
@Metadata(label = "advanced", defaultValue = "" +
OpensearchConstants.DEFAULT_SNIFFER_INTERVAL)
@@ -80,9 +86,13 @@ public class OpensearchComponent extends DefaultComponent {
config.setSnifferInterval(this.getSnifferInterval());
config.setSniffAfterFailureDelay(this.getSniffAfterFailureDelay());
config.setClusterName(remaining);
+ config.setSslContextParameters(this.getSslContextParameters());
Endpoint endpoint = new OpensearchEndpoint(uri, this, config, client);
setProperties(endpoint, parameters);
+ if (config.getSslContextParameters() == null) {
+
config.setSslContextParameters(retrieveGlobalSslContextParameters());
+ }
config.setHostAddressesList(parseHostAddresses(config.getHostAddresses(),
config));
return endpoint;
@@ -233,4 +243,29 @@ public class OpensearchComponent extends DefaultComponent {
this.sniffAfterFailureDelay = sniffAfterFailureDelay;
}
+ public SSLContextParameters getSslContextParameters() {
+ return sslContextParameters;
+ }
+
+ /**
+ * To configure security using SSLContextParameters. When configured, this
takes precedence over the
+ * {@code certificatePath} option.
+ */
+ public void setSslContextParameters(SSLContextParameters
sslContextParameters) {
+ this.sslContextParameters = sslContextParameters;
+ }
+
+ @Override
+ public boolean isUseGlobalSslContextParameters() {
+ return useGlobalSslContextParameters;
+ }
+
+ /**
+ * Enable usage of global SSL context parameters.
+ */
+ @Override
+ public void setUseGlobalSslContextParameters(boolean
useGlobalSslContextParameters) {
+ this.useGlobalSslContextParameters = useGlobalSslContextParameters;
+ }
+
}
diff --git
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
index 2dcb149520ca..25117ff43b91 100644
---
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
+++
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
@@ -25,6 +25,7 @@ import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.jsse.SSLContextParameters;
import org.apache.hc.core5.http.HttpHost;
@UriParams
@@ -62,6 +63,8 @@ public class OpensearchConfiguration {
@UriParam(label = "security")
@Metadata(supportFileReference = true)
private String certificatePath;
+ @UriParam(label = "security")
+ private SSLContextParameters sslContextParameters;
@UriParam
private boolean useScroll;
@UriParam(defaultValue = "" +
OpensearchConstants.DEFAULT_SCROLL_KEEP_ALIVE_MS)
@@ -329,4 +332,17 @@ public class OpensearchConfiguration {
public void setHostnameVerifier(HostnameVerifier hostnameVerifier) {
this.hostnameVerifier = hostnameVerifier;
}
+
+ public SSLContextParameters getSslContextParameters() {
+ return sslContextParameters;
+ }
+
+ /**
+ * To configure security using SSLContextParameters. When configured, this
takes precedence over the
+ * {@code certificatePath} option. This allows configuring named groups,
signature schemes, cipher suites, and
+ * protocols for the TLS connection.
+ */
+ public void setSslContextParameters(SSLContextParameters
sslContextParameters) {
+ this.sslContextParameters = sslContextParameters;
+ }
}
diff --git
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
index f42423d27c22..efd79fbe4af9 100644
---
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
+++
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
@@ -492,7 +492,15 @@ class OpensearchProducer extends DefaultAsyncProducer {
// Configure SSL if enabled
if (configuration.isEnableSSL()) {
SSLContext sslContext = null;
- if
(ObjectHelper.isNotEmpty(configuration.getCertificatePath())) {
+ if (configuration.getSslContextParameters() != null) {
+ // Use SSLContextParameters (allows configuring named
groups, cipher suites, protocols)
+ try {
+ sslContext = configuration.getSslContextParameters()
+
.createSSLContext(getEndpoint().getCamelContext());
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to create
SSLContext from SSLContextParameters", e);
+ }
+ } else if
(ObjectHelper.isNotEmpty(configuration.getCertificatePath())) {
// Use custom certificate
sslContext = createSslContextFromCa();
} else {
diff --git
a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/OpensearchSslContextParametersTest.java
b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/OpensearchSslContextParametersTest.java
new file mode 100644
index 000000000000..47faa8ca7250
--- /dev/null
+++
b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/OpensearchSslContextParametersTest.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.opensearch;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.support.jsse.SSLContextParameters;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class OpensearchSslContextParametersTest {
+
+ @Test
+ public void configurationPropertyRoundTrip() {
+ OpensearchConfiguration configuration = new OpensearchConfiguration();
+ assertNull(configuration.getSslContextParameters(),
+ "SSLContextParameters should be null by default");
+
+ SSLContextParameters sslContextParameters = new SSLContextParameters();
+ configuration.setSslContextParameters(sslContextParameters);
+ assertSame(sslContextParameters,
configuration.getSslContextParameters(),
+ "Getter should return the value set via setter");
+ }
+
+ @Test
+ public void componentPropagatesSslContextParametersToEndpoint() throws
Exception {
+ try (CamelContext context = new DefaultCamelContext()) {
+ context.start();
+
+ SSLContextParameters sslContextParameters = new
SSLContextParameters();
+ OpensearchComponent component = new OpensearchComponent(context);
+ component.setHostAddresses("localhost:9200");
+ component.setSslContextParameters(sslContextParameters);
+ context.addComponent("opensearch", component);
+
+ OpensearchEndpoint endpoint
+ = (OpensearchEndpoint)
context.getEndpoint("opensearch:test-cluster?enableSSL=true");
+ assertNotNull(endpoint);
+ assertSame(sslContextParameters,
endpoint.getConfiguration().getSslContextParameters(),
+ "Component-level SSLContextParameters must propagate to
the endpoint configuration");
+ }
+ }
+
+ @Test
+ public void endpointUsesGlobalSslContextParametersWhenEnabled() throws
Exception {
+ try (CamelContext context = new DefaultCamelContext()) {
+ SSLContextParameters globalParameters = new SSLContextParameters();
+ context.setSSLContextParameters(globalParameters);
+ context.start();
+
+ OpensearchComponent component = new OpensearchComponent(context);
+ component.setHostAddresses("localhost:9200");
+ component.setUseGlobalSslContextParameters(true);
+ context.addComponent("opensearch", component);
+
+ OpensearchEndpoint endpoint
+ = (OpensearchEndpoint)
context.getEndpoint("opensearch:test-cluster?enableSSL=true");
+ assertNotNull(endpoint);
+ assertTrue(component.isUseGlobalSslContextParameters());
+ assertSame(globalParameters,
endpoint.getConfiguration().getSslContextParameters(),
+ "Global SSLContextParameters must be used when
useGlobalSslContextParameters is true");
+ }
+ }
+
+ @Test
+ public void explicitSslContextParametersWinOverGlobal() throws Exception {
+ try (CamelContext context = new DefaultCamelContext()) {
+ SSLContextParameters globalParameters = new SSLContextParameters();
+ context.setSSLContextParameters(globalParameters);
+ context.start();
+
+ SSLContextParameters explicitParameters = new
SSLContextParameters();
+ OpensearchComponent component = new OpensearchComponent(context);
+ component.setHostAddresses("localhost:9200");
+ component.setUseGlobalSslContextParameters(true);
+ component.setSslContextParameters(explicitParameters);
+ context.addComponent("opensearch", component);
+
+ OpensearchEndpoint endpoint
+ = (OpensearchEndpoint)
context.getEndpoint("opensearch:test-cluster?enableSSL=true");
+ assertNotNull(endpoint);
+ assertSame(explicitParameters,
endpoint.getConfiguration().getSslContextParameters(),
+ "Component-level SSLContextParameters must win over the
global one");
+ }
+ }
+}
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/OpensearchComponentBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/OpensearchComponentBuilderFactory.java
index 579727a2f178..081561ea90ac 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/OpensearchComponentBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/OpensearchComponentBuilderFactory.java
@@ -272,6 +272,40 @@ public interface OpensearchComponentBuilderFactory {
return this;
}
+ /**
+ * To configure security using SSLContextParameters. When configured,
+ * this takes precedence over the certificatePath option.
+ *
+ * The option is a:
+ *
<code>org.apache.camel.support.jsse.SSLContextParameters</code>
type.
+ *
+ * Group: security
+ *
+ * @param sslContextParameters the value to set
+ * @return the dsl builder
+ */
+ default OpensearchComponentBuilder
sslContextParameters(org.apache.camel.support.jsse.SSLContextParameters
sslContextParameters) {
+ doSetProperty("sslContextParameters", sslContextParameters);
+ return this;
+ }
+
+
+ /**
+ * Enable usage of global SSL context parameters.
+ *
+ * The option is a: <code>boolean</code> type.
+ *
+ * Default: false
+ * Group: security
+ *
+ * @param useGlobalSslContextParameters the value to set
+ * @return the dsl builder
+ */
+ default OpensearchComponentBuilder
useGlobalSslContextParameters(boolean useGlobalSslContextParameters) {
+ doSetProperty("useGlobalSslContextParameters",
useGlobalSslContextParameters);
+ return this;
+ }
+
/**
* Basic authenticate user.
*
@@ -313,6 +347,8 @@ public interface OpensearchComponentBuilderFactory {
case "snifferInterval": ((OpensearchComponent)
component).setSnifferInterval((int) value); return true;
case "enableSSL": ((OpensearchComponent)
component).setEnableSSL((boolean) value); return true;
case "password": ((OpensearchComponent)
component).setPassword((java.lang.String) value); return true;
+ case "sslContextParameters": ((OpensearchComponent)
component).setSslContextParameters((org.apache.camel.support.jsse.SSLContextParameters)
value); return true;
+ case "useGlobalSslContextParameters": ((OpensearchComponent)
component).setUseGlobalSslContextParameters((boolean) value); return true;
case "user": ((OpensearchComponent)
component).setUser((java.lang.String) value); return true;
default: return false;
}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpensearchEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpensearchEndpointBuilderFactory.java
index 924defd6c126..1468c214fb7b 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpensearchEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpensearchEndpointBuilderFactory.java
@@ -422,6 +422,42 @@ public interface OpensearchEndpointBuilderFactory {
doSetProperty("enableSSL", enableSSL);
return this;
}
+ /**
+ * To configure security using SSLContextParameters. When configured,
+ * this takes precedence over the certificatePath option. This allows
+ * configuring named groups, signature schemes, cipher suites, and
+ * protocols for the TLS connection.
+ *
+ * The option is a:
+ * <code>org.apache.camel.support.jsse.SSLContextParameters</code>
type.
+ *
+ * Group: security
+ *
+ * @param sslContextParameters the value to set
+ * @return the dsl builder
+ */
+ default OpensearchEndpointBuilder
sslContextParameters(org.apache.camel.support.jsse.SSLContextParameters
sslContextParameters) {
+ doSetProperty("sslContextParameters", sslContextParameters);
+ return this;
+ }
+ /**
+ * To configure security using SSLContextParameters. When configured,
+ * this takes precedence over the certificatePath option. This allows
+ * configuring named groups, signature schemes, cipher suites, and
+ * protocols for the TLS connection.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.support.jsse.SSLContextParameters</code>
type.
+ *
+ * Group: security
+ *
+ * @param sslContextParameters the value to set
+ * @return the dsl builder
+ */
+ default OpensearchEndpointBuilder sslContextParameters(String
sslContextParameters) {
+ doSetProperty("sslContextParameters", sslContextParameters);
+ return this;
+ }
}
/**