You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/01/26 14:19:10 UTC
camel git commit: CAMEL-8413 - camel-stomp - Allow to configure SSL
Repository: camel
Updated Branches:
refs/heads/master 3437b3ed7 -> d3231d349
CAMEL-8413 - camel-stomp - Allow to configure SSL
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d3231d34
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d3231d34
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d3231d34
Branch: refs/heads/master
Commit: d3231d349b05333d78df1a31029091a9635f1f60
Parents: 3437b3e
Author: lburgazzoli <lb...@gmail.com>
Authored: Tue Jan 26 13:01:21 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jan 26 14:18:07 2016 +0100
----------------------------------------------------------------------
.../component/stomp/StompConfiguration.java | 18 +++-
.../camel/component/stomp/StompEndpoint.java | 5 +-
.../camel/component/stomp/StompBaseTest.java | 102 ++++++++++++++++++-
.../component/stomp/StompConsumerTest.java | 2 +-
.../component/stomp/StompConsumerUriTest.java | 8 +-
.../component/stomp/StompProducerTest.java | 2 +-
.../component/stomp/StompSslConsumerTest.java | 38 +++++++
.../component/stomp/StompSslProducerTest.java | 38 +++++++
.../src/test/resources/jsse/client.keystore | Bin 0 -> 2201 bytes
.../src/test/resources/jsse/server.keystore | Bin 0 -> 2201 bytes
.../src/test/resources/log4j.properties | 2 +-
11 files changed, 204 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompConfiguration.java b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompConfiguration.java
index e5d554e..5365699 100644
--- a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompConfiguration.java
+++ b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompConfiguration.java
@@ -20,11 +20,12 @@ import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
+import org.apache.camel.util.jsse.SSLContextParameters;
@UriParams
public class StompConfiguration implements Cloneable {
-
- @UriParam(defaultValue = "tcp://localhost:61613") @Metadata(required = "true")
+ @UriParam(defaultValue = "tcp://localhost:61613")
+ @Metadata(required = "true")
private String brokerURL = "tcp://localhost:61613";
@UriParam
private String login;
@@ -32,6 +33,8 @@ public class StompConfiguration implements Cloneable {
private String passcode;
@UriParam
private String host;
+ @UriParam(label = "security")
+ private SSLContextParameters sslContextParameters;
/**
* Returns a copy of this configuration
@@ -89,4 +92,15 @@ public class StompConfiguration implements Cloneable {
this.passcode = passcode;
}
+ public SSLContextParameters getSslContextParameters() {
+ return sslContextParameters;
+ }
+
+ /**
+ * To configure security using SSLContextParameters
+ */
+ public void setSslContextParameters(SSLContextParameters sslContextParameters) {
+ this.sslContextParameters = sslContextParameters;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
index 32f54b9..f8b73b2 100644
--- a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
+++ b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
@@ -80,11 +80,14 @@ public class StompEndpoint extends DefaultEndpoint {
@Override
protected void doStart() throws Exception {
- final Promise<CallbackConnection> promise = new Promise<CallbackConnection>();
+ final Promise<CallbackConnection> promise = new Promise<>();
stomp = new Stomp(configuration.getBrokerURL());
stomp.setLogin(configuration.getLogin());
stomp.setPasscode(configuration.getPasscode());
+ if (configuration.getSslContextParameters() != null) {
+ stomp.setSslContext(configuration.getSslContextParameters().createSSLContext());
+ }
stomp.connectCallback(promise);
if (configuration.getHost() != null && !configuration.getHost().isEmpty()) {
stomp.setHost(configuration.getHost());
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
index b79325c..3551e7a 100644
--- a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
@@ -16,9 +16,18 @@
*/
package org.apache.camel.component.stomp;
+import javax.net.ssl.SSLContext;
+
import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.SslContext;
+import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.test.AvailablePortFinder;
import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.util.jsse.KeyManagersParameters;
+import org.apache.camel.util.jsse.KeyStoreParameters;
+import org.apache.camel.util.jsse.SSLContextParameters;
+import org.apache.camel.util.jsse.TrustManagersParameters;
+import org.fusesource.stomp.client.Stomp;
public abstract class StompBaseTest extends CamelTestSupport {
@@ -26,6 +35,10 @@ public abstract class StompBaseTest extends CamelTestSupport {
protected int numberOfMessages = 100;
protected int port;
private boolean canTest;
+ private SSLContextParameters serverSslContextParameters;
+ private SSLContext serverSslContext;
+ private SSLContextParameters clientSslContextParameters;
+ private SSLContext clientSslContext;
protected int getPort() {
return port;
@@ -38,12 +51,26 @@ public abstract class StompBaseTest extends CamelTestSupport {
return canTest;
}
+ protected boolean isUseSsl() {
+ return false;
+ }
+
@Override
public boolean isUseRouteBuilder() {
return false;
}
@Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry registry = super.createRegistry();
+ if (isUseSsl()) {
+ registry.bind("sslContextParameters", getClientSSLContextParameters());
+ }
+
+ return registry;
+ }
+
+ @Override
public void setUp() throws Exception {
port = AvailablePortFinder.getNextAvailable(61613);
@@ -51,7 +78,17 @@ public abstract class StompBaseTest extends CamelTestSupport {
brokerService = new BrokerService();
brokerService.setPersistent(false);
brokerService.setAdvisorySupport(false);
- brokerService.addConnector("stomp://localhost:" + getPort() + "?trace=true");
+
+ if (isUseSsl()) {
+ SslContext sslContext = new SslContext();
+ sslContext.setSSLContext(getServerSSLContext());
+
+ brokerService.setSslContext(sslContext);
+ brokerService.addConnector("stomp+ssl://localhost:" + getPort() + "?trace=true");
+ } else {
+ brokerService.addConnector("stomp://localhost:" + getPort() + "?trace=true");
+ }
+
brokerService.start();
brokerService.waitUntilStarted();
super.setUp();
@@ -71,4 +108,67 @@ public abstract class StompBaseTest extends CamelTestSupport {
brokerService.waitUntilStopped();
}
}
+
+ protected Stomp createStompClient() throws Exception {
+ Stomp stomp;
+ if (isUseSsl()) {
+ stomp = new Stomp("ssl://localhost:" + getPort());
+ stomp.setSslContext(getClientSSLContext());
+ } else {
+ stomp = new Stomp("tcp://localhost:" + getPort());
+ }
+
+ return stomp;
+ }
+
+ protected SSLContextParameters getServerSSLContextParameters() {
+ if (serverSslContextParameters == null) {
+ serverSslContextParameters = getSSLContextParameters("jsse/server.keystore", "password");
+ }
+
+ return serverSslContextParameters;
+ }
+
+ protected SSLContext getServerSSLContext() throws Exception {
+ if (serverSslContext == null) {
+ serverSslContext = getServerSSLContextParameters().createSSLContext();
+ }
+
+ return serverSslContext;
+ }
+
+ protected SSLContextParameters getClientSSLContextParameters() {
+ if (clientSslContextParameters == null) {
+ clientSslContextParameters = getSSLContextParameters("jsse/client.keystore", "password");
+ }
+
+ return clientSslContextParameters;
+ }
+
+ protected SSLContext getClientSSLContext() throws Exception {
+ if (clientSslContext == null) {
+ clientSslContext = getClientSSLContextParameters().createSSLContext();
+ }
+
+ return clientSslContext;
+ }
+
+ private SSLContextParameters getSSLContextParameters(String path, String password) {
+ KeyStoreParameters ksp = new KeyStoreParameters();
+ ksp.setResource(path);
+ ksp.setPassword(password);
+
+ KeyManagersParameters kmp = new KeyManagersParameters();
+ kmp.setKeyPassword(password);
+ kmp.setKeyStore(ksp);
+
+ TrustManagersParameters tmp = new TrustManagersParameters();
+ tmp.setKeyStore(ksp);
+
+ SSLContextParameters sslContextParameters = new SSLContextParameters();
+ sslContextParameters.setKeyManagers(kmp);
+ sslContextParameters.setTrustManagers(tmp);
+
+ return sslContextParameters;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
index 22c58c9..02a349c 100644
--- a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
@@ -41,7 +41,7 @@ public class StompConsumerTest extends StompBaseTest {
context.addRoutes(createRouteBuilder());
context.start();
- Stomp stomp = new Stomp("tcp://localhost:" + getPort());
+ Stomp stomp = createStompClient();
final BlockingConnection producerConnection = stomp.connectBlocking();
MockEndpoint mock = getMockEndpoint("mock:result");
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
index 629ca2a..c9ad73d 100644
--- a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
@@ -41,7 +41,7 @@ public class StompConsumerUriTest extends StompBaseTest {
context.addRoutes(createRouteBuilder());
context.start();
- Stomp stomp = new Stomp("tcp://localhost:" + getPort());
+ Stomp stomp = createStompClient();
final BlockingConnection producerConnection = stomp.connectBlocking();
MockEndpoint mock = getMockEndpoint("mock:result");
@@ -62,9 +62,9 @@ public class StompConsumerUriTest extends StompBaseTest {
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
- from("stomp:queue:test?brokerURL=tcp://localhost:" + getPort())
- .transform(body().convertToString())
- .to("mock:result");
+ fromF("stomp:queue:test?brokerURL=tcp://localhost:%d", getPort())
+ .transform(body().convertToString())
+ .to("mock:result");
}
};
}
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
index c87d2d1..c1e09dc 100644
--- a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
@@ -42,7 +42,7 @@ public class StompProducerTest extends StompBaseTest {
context.addRoutes(createRouteBuilder());
context.start();
- Stomp stomp = new Stomp("tcp://localhost:" + getPort());
+ Stomp stomp = createStompClient();
final BlockingConnection subscribeConnection = stomp.connectBlocking();
StompFrame frame = new StompFrame(SUBSCRIBE);
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
new file mode 100644
index 0000000..bee9f4b
--- /dev/null
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
@@ -0,0 +1,38 @@
+/**
+ * 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.stomp;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class StompSslConsumerTest extends StompConsumerTest {
+
+ @Override
+ protected boolean isUseSsl() {
+ return true;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ fromF("stomp:queue:test?brokerURL=ssl://localhost:%d&sslContextParameters=#sslContextParameters", getPort())
+ .transform(body().convertToString())
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
new file mode 100644
index 0000000..9054216
--- /dev/null
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
@@ -0,0 +1,38 @@
+/**
+ * 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.stomp;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class StompSslProducerTest extends StompProducerTest {
+
+ @Override
+ protected boolean isUseSsl() {
+ return true;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ from("direct:foo")
+ .toF("stomp:queue:test?brokerURL=ssl://localhost:%d&sslContextParameters=#sslContextParameters", getPort());
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/resources/jsse/client.keystore
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/resources/jsse/client.keystore b/components/camel-stomp/src/test/resources/jsse/client.keystore
new file mode 100755
index 0000000..6ab1286
Binary files /dev/null and b/components/camel-stomp/src/test/resources/jsse/client.keystore differ
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/resources/jsse/server.keystore
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/resources/jsse/server.keystore b/components/camel-stomp/src/test/resources/jsse/server.keystore
new file mode 100755
index 0000000..b8af477
Binary files /dev/null and b/components/camel-stomp/src/test/resources/jsse/server.keystore differ
http://git-wip-us.apache.org/repos/asf/camel/blob/d3231d34/components/camel-stomp/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-stomp/src/test/resources/log4j.properties b/components/camel-stomp/src/test/resources/log4j.properties
index 55f9354..d8932fa 100644
--- a/components/camel-stomp/src/test/resources/log4j.properties
+++ b/components/camel-stomp/src/test/resources/log4j.properties
@@ -18,7 +18,7 @@
#
# The logging properties used during tests..
#
-log4j.rootLogger=info, file
+log4j.rootLogger=INFO, file
#log4j.logger.twitter4j=DEBUG
#log4j.logger.org.apache.camel.component.stomp=DEBUG