You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/06/02 07:32:59 UTC
[camel] branch main updated: CAMEL-16677: Move vertx SSL setup to
vertx-common
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton 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 9f189ef CAMEL-16677: Move vertx SSL setup to vertx-common
9f189ef is described below
commit 9f189ef34067097b40c2f5ba16192485b9ab96dd
Author: James Netherton <ja...@gmail.com>
AuthorDate: Wed Jun 2 07:44:08 2021 +0100
CAMEL-16677: Move vertx SSL setup to vertx-common
---
.../http/vertx/VertxPlatformHttpServer.java | 4 +-
.../http/vertx/VertxPlatformHttpServerSupport.java | 138 +-------------------
.../vertx/common/KeyManagerFactoryOptions.java | 53 ++++++++
.../vertx/common/TrustManagerFactoryOptions.java | 52 ++++++++
.../camel/component/vertx/common/VertxHelper.java | 129 +++++++++++++++++++
.../component/vertx/http/VertxHttpEndpoint.java | 3 +-
.../component/vertx/http/VertxHttpHelper.java | 90 -------------
.../camel-vertx/camel-vertx-websocket/pom.xml | 4 +
.../vertx/websocket/VertxWebsocketComponent.java | 4 +-
.../vertx/websocket/VertxWebsocketEndpoint.java | 5 +-
.../vertx/websocket/VertxWebsocketHelper.java | 141 ---------------------
.../vertx/websocket/VertxWebsocketHost.java | 9 +-
.../vertx/websocket/VertxWebSocketTestSupport.java | 2 +-
.../VertxWebsocketExternalServerTest.java | 2 +-
.../vertx/websocket/VertxWebsocketTest.java | 2 +-
15 files changed, 259 insertions(+), 379 deletions(-)
diff --git a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServer.java b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServer.java
index 8462ba5..73caa30 100644
--- a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServer.java
+++ b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServer.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.component.platform.http.vertx;
-import java.io.IOException;
-import java.security.GeneralSecurityException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
@@ -161,7 +159,7 @@ public class VertxPlatformHttpServer extends ServiceSupport implements CamelCont
});
}
- protected void startServer() throws GeneralSecurityException, IOException {
+ protected void startServer() throws Exception {
HttpServerOptions options = new HttpServerOptions();
configureSSL(options, configuration, context);
diff --git a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServerSupport.java b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServerSupport.java
index c7336f1..5f8fb5b 100644
--- a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServerSupport.java
+++ b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpServerSupport.java
@@ -16,36 +16,23 @@
*/
package org.apache.camel.component.platform.http.vertx;
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
-import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509KeyManager;
-
import io.vertx.core.Handler;
-import io.vertx.core.Vertx;
import io.vertx.core.http.HttpHeaders;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
-import io.vertx.core.net.KeyCertOptions;
-import io.vertx.core.net.TrustOptions;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.handler.BodyHandler;
import org.apache.camel.CamelContext;
-import org.apache.camel.support.jsse.KeyManagersParameters;
+import org.apache.camel.component.vertx.common.VertxHelper;
import org.apache.camel.support.jsse.SSLContextParameters;
-import org.apache.camel.support.jsse.TrustManagersParameters;
import org.apache.camel.util.ObjectHelper;
public final class VertxPlatformHttpServerSupport {
@@ -169,134 +156,15 @@ public final class VertxPlatformHttpServerSupport {
static HttpServerOptions configureSSL(
HttpServerOptions options, VertxPlatformHttpServerConfiguration configuration, CamelContext camelContext)
- throws GeneralSecurityException, IOException {
+ throws Exception {
final SSLContextParameters sslParameters = configuration.getSslContextParameters() != null
? configuration.getSslContextParameters()
: configuration.isUseGlobalSslContextParameters() ? camelContext.getSSLContextParameters() : null;
if (sslParameters != null) {
- options.setSsl(true);
- options.setKeyCertOptions(new KeyManagerFactoryOptions(createKeyManagerFactory(camelContext, sslParameters)));
- options.setTrustOptions(new TrustManagerFactoryOptions(createTrustManagerFactory(camelContext, sslParameters)));
+ VertxHelper.setupSSLOptions(camelContext, sslParameters, options);
}
return options;
}
-
- private static class KeyManagerFactoryOptions implements KeyCertOptions {
- private final KeyManagerFactory keyManagerFactory;
-
- public KeyManagerFactoryOptions(KeyManagerFactory keyManagerFactory) {
- this.keyManagerFactory = keyManagerFactory;
- }
-
- private KeyManagerFactoryOptions(KeyManagerFactoryOptions other) {
- this.keyManagerFactory = other.keyManagerFactory;
- }
-
- @Override
- public KeyCertOptions copy() {
- return new KeyManagerFactoryOptions(this);
- }
-
- @Override
- public KeyManagerFactory getKeyManagerFactory(Vertx vertx) {
- return keyManagerFactory;
- }
-
- @Override
- public Function<String, X509KeyManager> keyManagerMapper(Vertx vertx) {
- return keyManagerFactory.getKeyManagers()[0] instanceof X509KeyManager
- ? serverName -> (X509KeyManager) keyManagerFactory.getKeyManagers()[0] : null;
- }
- }
-
- private static class TrustManagerFactoryOptions implements TrustOptions {
- private final TrustManagerFactory trustManagerFactory;
-
- public TrustManagerFactoryOptions(TrustManagerFactory trustManagerFactory) {
- this.trustManagerFactory = trustManagerFactory;
- }
-
- private TrustManagerFactoryOptions(TrustManagerFactoryOptions other) {
- trustManagerFactory = other.trustManagerFactory;
- }
-
- @Override
- public TrustOptions copy() {
- return new TrustManagerFactoryOptions(this);
- }
-
- @Override
- public TrustManagerFactory getTrustManagerFactory(Vertx vertx) {
- return trustManagerFactory;
- }
-
- @Override
- public Function<String, TrustManager[]> trustManagerMapper(Vertx vertx) {
- return serverName -> trustManagerFactory.getTrustManagers();
- }
- }
-
- private static KeyManagerFactory createKeyManagerFactory(
- CamelContext camelContext, SSLContextParameters sslContextParameters)
- throws GeneralSecurityException, IOException {
- final KeyManagersParameters keyManagers = sslContextParameters.getKeyManagers();
- if (keyManagers == null) {
- return null;
- }
-
- String kmfAlgorithm = camelContext.resolvePropertyPlaceholders(keyManagers.getAlgorithm());
- if (kmfAlgorithm == null) {
- kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
- }
-
- KeyManagerFactory kmf;
- if (keyManagers.getProvider() == null) {
- kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
- } else {
- kmf = KeyManagerFactory.getInstance(kmfAlgorithm,
- camelContext.resolvePropertyPlaceholders(keyManagers.getProvider()));
- }
-
- char[] kmfPassword = null;
- if (keyManagers.getKeyPassword() != null) {
- kmfPassword = camelContext.resolvePropertyPlaceholders(keyManagers.getKeyPassword()).toCharArray();
- }
-
- KeyStore ks = keyManagers.getKeyStore() == null ? null : keyManagers.getKeyStore().createKeyStore();
-
- kmf.init(ks, kmfPassword);
- return kmf;
- }
-
- private static TrustManagerFactory createTrustManagerFactory(
- CamelContext camelContext, SSLContextParameters sslContextParameters)
- throws GeneralSecurityException, IOException {
- final TrustManagersParameters trustManagers = sslContextParameters.getTrustManagers();
- if (trustManagers == null) {
- return null;
- }
-
- TrustManagerFactory tmf = null;
-
- if (trustManagers.getKeyStore() != null) {
- String tmfAlgorithm = camelContext.resolvePropertyPlaceholders(trustManagers.getAlgorithm());
- if (tmfAlgorithm == null) {
- tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
- }
-
- if (trustManagers.getProvider() == null) {
- tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
- } else {
- tmf = TrustManagerFactory.getInstance(tmfAlgorithm,
- camelContext.resolvePropertyPlaceholders(trustManagers.getProvider()));
- }
-
- KeyStore ks = trustManagers.getKeyStore() == null ? null : trustManagers.getKeyStore().createKeyStore();
- tmf.init(ks);
- }
-
- return tmf;
- }
}
diff --git a/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/KeyManagerFactoryOptions.java b/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/KeyManagerFactoryOptions.java
new file mode 100644
index 0000000..170bced
--- /dev/null
+++ b/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/KeyManagerFactoryOptions.java
@@ -0,0 +1,53 @@
+/*
+ * 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.vertx.common;
+
+import java.util.function.Function;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.X509KeyManager;
+
+import io.vertx.core.Vertx;
+import io.vertx.core.net.KeyCertOptions;
+
+public class KeyManagerFactoryOptions implements KeyCertOptions {
+ private final KeyManagerFactory keyManagerFactory;
+
+ public KeyManagerFactoryOptions(KeyManagerFactory keyManagerFactory) {
+ this.keyManagerFactory = keyManagerFactory;
+ }
+
+ private KeyManagerFactoryOptions(KeyManagerFactoryOptions other) {
+ this.keyManagerFactory = other.keyManagerFactory;
+ }
+
+ @Override
+ public KeyCertOptions copy() {
+ return new KeyManagerFactoryOptions(this);
+ }
+
+ @Override
+ public KeyManagerFactory getKeyManagerFactory(Vertx vertx) {
+ return keyManagerFactory;
+ }
+
+ @Override
+ public Function<String, X509KeyManager> keyManagerMapper(Vertx vertx) {
+ return keyManagerFactory.getKeyManagers()[0] instanceof X509KeyManager
+ ? serverName -> (X509KeyManager) keyManagerFactory.getKeyManagers()[0] : null;
+ }
+}
diff --git a/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/TrustManagerFactoryOptions.java b/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/TrustManagerFactoryOptions.java
new file mode 100644
index 0000000..cedd626
--- /dev/null
+++ b/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/TrustManagerFactoryOptions.java
@@ -0,0 +1,52 @@
+/*
+ * 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.vertx.common;
+
+import java.util.function.Function;
+
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+
+import io.vertx.core.Vertx;
+import io.vertx.core.net.TrustOptions;
+
+public class TrustManagerFactoryOptions implements TrustOptions {
+ private final TrustManagerFactory trustManagerFactory;
+
+ public TrustManagerFactoryOptions(TrustManagerFactory trustManagerFactory) {
+ this.trustManagerFactory = trustManagerFactory;
+ }
+
+ private TrustManagerFactoryOptions(TrustManagerFactoryOptions other) {
+ trustManagerFactory = other.trustManagerFactory;
+ }
+
+ @Override
+ public TrustOptions copy() {
+ return new TrustManagerFactoryOptions(this);
+ }
+
+ @Override
+ public TrustManagerFactory getTrustManagerFactory(Vertx vertx) {
+ return trustManagerFactory;
+ }
+
+ @Override
+ public Function<String, TrustManager[]> trustManagerMapper(Vertx vertx) {
+ return serverName -> trustManagerFactory.getTrustManagers();
+ }
+}
diff --git a/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/VertxHelper.java b/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/VertxHelper.java
new file mode 100644
index 0000000..edf4e1c
--- /dev/null
+++ b/components/camel-vertx/camel-vertx-common/src/main/java/org/apache/camel/component/vertx/common/VertxHelper.java
@@ -0,0 +1,129 @@
+/*
+ * 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.vertx.common;
+
+import java.security.KeyStore;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.TrustManagerFactory;
+
+import io.vertx.core.net.TCPSSLOptions;
+import org.apache.camel.CamelContext;
+import org.apache.camel.support.jsse.KeyManagersParameters;
+import org.apache.camel.support.jsse.SSLContextParameters;
+import org.apache.camel.support.jsse.TrustManagersParameters;
+
+public final class VertxHelper {
+
+ private VertxHelper() {
+ // Utility class
+ }
+
+ /**
+ * Configures key store and trust store options for the given TCPSSLOptions from the configuration specified on
+ * SSLContextParameters
+ *
+ * @param camelContext the CamelContext
+ * @param sslContextParameters the SSL configuration to use for the KeyManagerFactory & TrustManagerFactory
+ * @param tcpsslOptions the TCPSSLOptions instance to configure
+ */
+ public static void setupSSLOptions(
+ CamelContext camelContext, SSLContextParameters sslContextParameters, TCPSSLOptions tcpsslOptions)
+ throws Exception {
+
+ if (camelContext == null) {
+ throw new IllegalArgumentException("camelContext cannot be null");
+ }
+
+ if (sslContextParameters == null) {
+ throw new IllegalArgumentException("sslContextParameters cannot be null");
+ }
+
+ if (tcpsslOptions == null) {
+ throw new IllegalArgumentException("tcpsslOptions cannot be null");
+ }
+
+ tcpsslOptions.setSsl(true);
+
+ KeyManagerFactory keyManagerFactory = createKeyManagerFactory(camelContext, sslContextParameters);
+ tcpsslOptions.setKeyCertOptions(new KeyManagerFactoryOptions(keyManagerFactory));
+
+ TrustManagerFactory trustManagerFactory = createTrustManagerFactory(camelContext, sslContextParameters);
+ tcpsslOptions.setTrustOptions(new TrustManagerFactoryOptions(trustManagerFactory));
+ }
+
+ private static KeyManagerFactory createKeyManagerFactory(
+ CamelContext camelContext, SSLContextParameters sslContextParameters)
+ throws Exception {
+ final KeyManagersParameters keyManagers = sslContextParameters.getKeyManagers();
+ if (keyManagers == null) {
+ return null;
+ }
+
+ String kmfAlgorithm = camelContext.resolvePropertyPlaceholders(keyManagers.getAlgorithm());
+ if (kmfAlgorithm == null) {
+ kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
+ }
+
+ KeyManagerFactory kmf;
+ if (keyManagers.getProvider() == null) {
+ kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
+ } else {
+ kmf = KeyManagerFactory.getInstance(kmfAlgorithm,
+ camelContext.resolvePropertyPlaceholders(keyManagers.getProvider()));
+ }
+
+ char[] kmfPassword = null;
+ if (keyManagers.getKeyPassword() != null) {
+ kmfPassword = camelContext.resolvePropertyPlaceholders(keyManagers.getKeyPassword()).toCharArray();
+ }
+
+ KeyStore ks = keyManagers.getKeyStore() == null ? null : keyManagers.getKeyStore().createKeyStore();
+
+ kmf.init(ks, kmfPassword);
+ return kmf;
+ }
+
+ private static TrustManagerFactory createTrustManagerFactory(
+ CamelContext camelContext, SSLContextParameters sslContextParameters)
+ throws Exception {
+ final TrustManagersParameters trustManagers = sslContextParameters.getTrustManagers();
+ if (trustManagers == null) {
+ return null;
+ }
+
+ TrustManagerFactory tmf = null;
+
+ if (trustManagers.getKeyStore() != null) {
+ String tmfAlgorithm = camelContext.resolvePropertyPlaceholders(trustManagers.getAlgorithm());
+ if (tmfAlgorithm == null) {
+ tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
+ }
+
+ if (trustManagers.getProvider() == null) {
+ tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
+ } else {
+ tmf = TrustManagerFactory.getInstance(tmfAlgorithm,
+ camelContext.resolvePropertyPlaceholders(trustManagers.getProvider()));
+ }
+
+ KeyStore ks = trustManagers.getKeyStore() == null ? null : trustManagers.getKeyStore().createKeyStore();
+ tmf.init(ks);
+ }
+ return tmf;
+ }
+}
diff --git a/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java b/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java
index 5c49105..76b98da 100644
--- a/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java
+++ b/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java
@@ -26,6 +26,7 @@ import org.apache.camel.Category;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
+import org.apache.camel.component.vertx.common.VertxHelper;
import org.apache.camel.http.base.HttpHelper;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
@@ -88,7 +89,7 @@ public class VertxHttpEndpoint extends DefaultEndpoint {
SSLContextParameters sslContextParameters = configuration.getSslContextParameters();
if (sslContextParameters != null) {
- VertxHttpHelper.setupSSLOptions(sslContextParameters, options);
+ VertxHelper.setupSSLOptions(getCamelContext(), sslContextParameters, options);
}
webClient = WebClient.create(getVertx(), options);
diff --git a/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpHelper.java b/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpHelper.java
index 63aedb7..a691f64 100644
--- a/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpHelper.java
+++ b/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpHelper.java
@@ -23,21 +23,11 @@ import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
-import java.security.KeyStore;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.TrustManagerFactory;
-
-import io.vertx.core.Vertx;
-import io.vertx.core.net.KeyStoreOptions;
-import io.vertx.core.net.TCPSSLOptions;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePropertyKey;
import org.apache.camel.Message;
import org.apache.camel.http.base.HttpHelper;
-import org.apache.camel.support.jsse.KeyManagersParameters;
-import org.apache.camel.support.jsse.SSLContextParameters;
-import org.apache.camel.support.jsse.TrustManagersParameters;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.UnsafeUriCharactersEncoder;
@@ -49,25 +39,6 @@ public final class VertxHttpHelper {
}
/**
- * Configures key store and trust store options for the Vert.x client and server
- */
- public static void setupSSLOptions(SSLContextParameters sslContextParameters, TCPSSLOptions options) {
- options.setSsl(true);
- options.setKeyCertOptions(new KeyStoreOptions() {
- @Override
- public KeyManagerFactory getKeyManagerFactory(Vertx vertx) throws Exception {
- return createKeyManagerFactory(sslContextParameters);
- }
- });
- options.setTrustOptions(new KeyStoreOptions() {
- @Override
- public TrustManagerFactory getTrustManagerFactory(Vertx vertx) throws Exception {
- return createTrustManagerFactory(sslContextParameters);
- }
- });
- }
-
- /**
* Resolves a HTTP URI query string from the given exchange message headers
*/
public static String resolveQueryString(Exchange exchange) throws URISyntaxException {
@@ -175,65 +146,4 @@ public final class VertxHttpHelper {
}
return charset;
}
-
- /**
- * Creates a KeyManagerFactory from a given SSLContextParameters
- */
- private static KeyManagerFactory createKeyManagerFactory(SSLContextParameters sslContextParameters) throws Exception {
- final KeyManagersParameters keyManagers = sslContextParameters.getKeyManagers();
- if (keyManagers == null) {
- return null;
- }
-
- String kmfAlgorithm = keyManagers.getAlgorithm();
- if (kmfAlgorithm == null) {
- kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
- }
-
- KeyManagerFactory kmf;
- if (keyManagers.getProvider() == null) {
- kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
- } else {
- kmf = KeyManagerFactory.getInstance(kmfAlgorithm, keyManagers.getProvider());
- }
-
- char[] kmfPassword = null;
- if (keyManagers.getKeyPassword() != null) {
- kmfPassword = keyManagers.getKeyPassword().toCharArray();
- }
-
- KeyStore ks = keyManagers.getKeyStore() == null ? null : keyManagers.getKeyStore().createKeyStore();
-
- kmf.init(ks, kmfPassword);
- return kmf;
- }
-
- /**
- * Creates a TrustManagerFactory from a given SSLContextParameters
- */
- private static TrustManagerFactory createTrustManagerFactory(SSLContextParameters sslContextParameters) throws Exception {
- final TrustManagersParameters trustManagers = sslContextParameters.getTrustManagers();
- if (trustManagers == null) {
- return null;
- }
-
- TrustManagerFactory tmf = null;
-
- if (trustManagers.getKeyStore() != null) {
- String tmfAlgorithm = trustManagers.getAlgorithm();
- if (tmfAlgorithm == null) {
- tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
- }
-
- if (trustManagers.getProvider() == null) {
- tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
- } else {
- tmf = TrustManagerFactory.getInstance(tmfAlgorithm, trustManagers.getProvider());
- }
-
- KeyStore ks = trustManagers.getKeyStore() == null ? null : trustManagers.getKeyStore().createKeyStore();
- tmf.init(ks);
- }
- return tmf;
- }
}
diff --git a/components/camel-vertx/camel-vertx-websocket/pom.xml b/components/camel-vertx/camel-vertx-websocket/pom.xml
index a3d7e1b..e5bcf5f 100644
--- a/components/camel-vertx/camel-vertx-websocket/pom.xml
+++ b/components/camel-vertx/camel-vertx-websocket/pom.xml
@@ -40,6 +40,10 @@
<artifactId>camel-support</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-vertx-common</artifactId>
+ </dependency>
+ <dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>${vertx-version}</version>
diff --git a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketComponent.java b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketComponent.java
index 0561d8e..a25e819 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketComponent.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketComponent.java
@@ -195,12 +195,12 @@ public class VertxWebsocketComponent extends DefaultComponent implements SSLCont
this.useGlobalSslContextParameters = useGlobalSslContextParameters;
}
- protected Map<VertxWebsocketHostKey, VertxWebsocketHost> getVerxHostRegistry() {
+ protected Map<VertxWebsocketHostKey, VertxWebsocketHost> getVertxHostRegistry() {
return this.vertxHostRegistry;
}
protected VertxWebsocketHost createVertxWebsocketHost(
VertxWebsocketHostConfiguration hostConfiguration, VertxWebsocketHostKey hostKey) {
- return new VertxWebsocketHost(hostConfiguration, hostKey);
+ return new VertxWebsocketHost(getCamelContext(), hostConfiguration, hostKey);
}
}
diff --git a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketEndpoint.java b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketEndpoint.java
index 9d59a1d..c414395 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketEndpoint.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketEndpoint.java
@@ -32,6 +32,7 @@ import org.apache.camel.Consumer;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
+import org.apache.camel.component.vertx.common.VertxHelper;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.support.DefaultEndpoint;
@@ -101,7 +102,7 @@ public class VertxWebsocketEndpoint extends DefaultEndpoint {
SSLContextParameters sslContextParameters = configuration.getSslContextParameters();
if (sslContextParameters != null) {
- VertxWebsocketHelper.setupSSLOptions(sslContextParameters, options);
+ VertxHelper.setupSSLOptions(getCamelContext(), sslContextParameters, options);
}
client = getVertx().createHttpClient(options);
@@ -134,7 +135,7 @@ public class VertxWebsocketEndpoint extends DefaultEndpoint {
}
protected Map<VertxWebsocketHostKey, VertxWebsocketHost> getVertxHostRegistry() {
- return getComponent().getVerxHostRegistry();
+ return getComponent().getVertxHostRegistry();
}
/**
diff --git a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHelper.java b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHelper.java
index 4592b9d..b0998ae 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHelper.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHelper.java
@@ -16,22 +16,6 @@
*/
package org.apache.camel.component.vertx.websocket;
-import java.security.KeyStore;
-import java.util.function.Function;
-
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509KeyManager;
-
-import io.vertx.core.Vertx;
-import io.vertx.core.net.KeyCertOptions;
-import io.vertx.core.net.TCPSSLOptions;
-import io.vertx.core.net.TrustOptions;
-import org.apache.camel.support.jsse.KeyManagersParameters;
-import org.apache.camel.support.jsse.SSLContextParameters;
-import org.apache.camel.support.jsse.TrustManagersParameters;
-
public final class VertxWebsocketHelper {
private VertxWebsocketHelper() {
@@ -39,70 +23,6 @@ public final class VertxWebsocketHelper {
}
/**
- * Configures key store and trust store options for the Vert.x client and server
- */
- public static void setupSSLOptions(SSLContextParameters sslContextParameters, TCPSSLOptions options) throws Exception {
- options.setSsl(true);
- options.setKeyCertOptions(new KeyManagerFactoryOptions(createKeyManagerFactory(sslContextParameters)));
- options.setTrustOptions(new TrustManagerFactoryOptions(createTrustManagerFactory(sslContextParameters)));
- }
-
- private static class KeyManagerFactoryOptions implements KeyCertOptions {
- private final KeyManagerFactory keyManagerFactory;
-
- public KeyManagerFactoryOptions(KeyManagerFactory keyManagerFactory) {
- this.keyManagerFactory = keyManagerFactory;
- }
-
- private KeyManagerFactoryOptions(KeyManagerFactoryOptions other) {
- this.keyManagerFactory = other.keyManagerFactory;
- }
-
- @Override
- public KeyCertOptions copy() {
- return new KeyManagerFactoryOptions(this);
- }
-
- @Override
- public KeyManagerFactory getKeyManagerFactory(Vertx vertx) {
- return keyManagerFactory;
- }
-
- @Override
- public Function<String, X509KeyManager> keyManagerMapper(Vertx vertx) {
- return keyManagerFactory.getKeyManagers()[0] instanceof X509KeyManager
- ? serverName -> (X509KeyManager) keyManagerFactory.getKeyManagers()[0] : null;
- }
- }
-
- private static class TrustManagerFactoryOptions implements TrustOptions {
- private final TrustManagerFactory trustManagerFactory;
-
- public TrustManagerFactoryOptions(TrustManagerFactory trustManagerFactory) {
- this.trustManagerFactory = trustManagerFactory;
- }
-
- private TrustManagerFactoryOptions(TrustManagerFactoryOptions other) {
- trustManagerFactory = other.trustManagerFactory;
- }
-
- @Override
- public TrustOptions copy() {
- return new TrustManagerFactoryOptions(this);
- }
-
- @Override
- public TrustManagerFactory getTrustManagerFactory(Vertx vertx) {
- return trustManagerFactory;
- }
-
- @Override
- public Function<String, TrustManager[]> trustManagerMapper(Vertx vertx) {
- return serverName -> trustManagerFactory.getTrustManagers();
- }
- }
-
- /**
* Extracts the port number from the endpoint URI path or returns the Vert.x default HTTP server port (0) if one was
* not provided
*/
@@ -157,65 +77,4 @@ public final class VertxWebsocketHelper {
public static VertxWebsocketHostKey createHostKey(VertxWebsocketConfiguration configuration) {
return new VertxWebsocketHostKey(configuration.getHost(), configuration.getPort());
}
-
- /**
- * Creates a KeyManagerFactory from a given SSLContextParameters
- */
- private static KeyManagerFactory createKeyManagerFactory(SSLContextParameters sslContextParameters) throws Exception {
- final KeyManagersParameters keyManagers = sslContextParameters.getKeyManagers();
- if (keyManagers == null) {
- return null;
- }
-
- String kmfAlgorithm = keyManagers.getAlgorithm();
- if (kmfAlgorithm == null) {
- kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
- }
-
- KeyManagerFactory kmf;
- if (keyManagers.getProvider() == null) {
- kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
- } else {
- kmf = KeyManagerFactory.getInstance(kmfAlgorithm, keyManagers.getProvider());
- }
-
- char[] kmfPassword = null;
- if (keyManagers.getKeyPassword() != null) {
- kmfPassword = keyManagers.getKeyPassword().toCharArray();
- }
-
- KeyStore ks = keyManagers.getKeyStore() == null ? null : keyManagers.getKeyStore().createKeyStore();
-
- kmf.init(ks, kmfPassword);
- return kmf;
- }
-
- /**
- * Creates a TrustManagerFactory from a given SSLContextParameters
- */
- private static TrustManagerFactory createTrustManagerFactory(SSLContextParameters sslContextParameters) throws Exception {
- final TrustManagersParameters trustManagers = sslContextParameters.getTrustManagers();
- if (trustManagers == null) {
- return null;
- }
-
- TrustManagerFactory tmf = null;
-
- if (trustManagers.getKeyStore() != null) {
- String tmfAlgorithm = trustManagers.getAlgorithm();
- if (tmfAlgorithm == null) {
- tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
- }
-
- if (trustManagers.getProvider() == null) {
- tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
- } else {
- tmf = TrustManagerFactory.getInstance(tmfAlgorithm, trustManagers.getProvider());
- }
-
- KeyStore ks = trustManagers.getKeyStore() == null ? null : trustManagers.getKeyStore().createKeyStore();
- tmf.init(ks);
- }
- return tmf;
- }
}
diff --git a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHost.java b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHost.java
index 9fb9490..16dc263 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHost.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketHost.java
@@ -33,6 +33,8 @@ import io.vertx.core.net.SocketAddress;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.CorsHandler;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.vertx.common.VertxHelper;
import org.apache.camel.support.jsse.SSLContextParameters;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
@@ -48,10 +50,13 @@ public class VertxWebsocketHost {
private final VertxWebsocketHostKey hostKey;
private final Map<String, Route> routeRegistry = new HashMap<>();
private final Map<String, ServerWebSocket> connectedPeers = new ConcurrentHashMap<>();
+ private final CamelContext camelContext;
private HttpServer server;
private int port = VertxWebsocketConstants.DEFAULT_VERTX_SERVER_PORT;
- public VertxWebsocketHost(VertxWebsocketHostConfiguration websocketHostConfiguration, VertxWebsocketHostKey key) {
+ public VertxWebsocketHost(CamelContext camelContext, VertxWebsocketHostConfiguration websocketHostConfiguration,
+ VertxWebsocketHostKey key) {
+ this.camelContext = camelContext;
this.hostConfiguration = websocketHostConfiguration;
this.hostKey = key;
}
@@ -161,7 +166,7 @@ public class VertxWebsocketHost {
options = new HttpServerOptions();
}
- VertxWebsocketHelper.setupSSLOptions(sslContextParameters, options);
+ VertxHelper.setupSSLOptions(camelContext, sslContextParameters, options);
}
if (options != null) {
diff --git a/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebSocketTestSupport.java b/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebSocketTestSupport.java
index b9ba631..32b159f 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebSocketTestSupport.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebSocketTestSupport.java
@@ -41,7 +41,7 @@ public class VertxWebSocketTestSupport extends CamelTestSupport {
*/
public int getVertxServerRandomPort() {
VertxWebsocketComponent component = context.getComponent("vertx-websocket", VertxWebsocketComponent.class);
- Map<VertxWebsocketHostKey, VertxWebsocketHost> registry = component.getVerxHostRegistry();
+ Map<VertxWebsocketHostKey, VertxWebsocketHost> registry = component.getVertxHostRegistry();
return registry.values()
.stream()
.filter(wsHost -> wsHost.getPort() != port)
diff --git a/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketExternalServerTest.java b/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketExternalServerTest.java
index b286ea5..54589a0 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketExternalServerTest.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketExternalServerTest.java
@@ -98,7 +98,7 @@ public class VertxWebsocketExternalServerTest extends VertxWebSocketTestSupport
VertxWebsocketHostConfiguration configuration = new VertxWebsocketHostConfiguration(vertx, router, options, null);
VertxWebsocketHostKey key = new VertxWebsocketHostKey("localhost", 0);
- VertxWebsocketHost host = new VertxWebsocketHost(configuration, key);
+ VertxWebsocketHost host = new VertxWebsocketHost(context, configuration, key);
host.start();
CamelContext context = new DefaultCamelContext();
diff --git a/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketTest.java b/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketTest.java
index 11f456e..3fcd5e9 100644
--- a/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketTest.java
+++ b/components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketTest.java
@@ -218,7 +218,7 @@ public class VertxWebsocketTest extends VertxWebSocketTestSupport {
List<String> results = new ArrayList<>();
VertxWebsocketComponent component = context.getComponent("vertx-websocket", VertxWebsocketComponent.class);
- Map<VertxWebsocketHostKey, VertxWebsocketHost> registry = component.getVerxHostRegistry();
+ Map<VertxWebsocketHostKey, VertxWebsocketHost> registry = component.getVertxHostRegistry();
VertxWebsocketHost host = registry.values()
.stream()
.filter(wsHost -> wsHost.getPort() != port)