ARTEMIS-1846 fix activemq.usemaskedpassword in URL
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/a6fe2559 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/a6fe2559 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/a6fe2559 Branch: refs/heads/master Commit: a6fe25599cb73555642fa0ed72740279844604f7 Parents: 541dfc6 Author: Justin Bertram <[email protected]> Authored: Thu May 3 10:28:05 2018 -0500 Committer: Clebert Suconic <[email protected]> Committed: Thu May 3 12:09:58 2018 -0400 ---------------------------------------------------------------------- .../artemis/utils/ConfigurationHelper.java | 8 +- .../ssl/CoreClientOverOneWaySSLTest.java | 80 ++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/a6fe2559/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/ConfigurationHelper.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/ConfigurationHelper.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/ConfigurationHelper.java index 4367318..3b2647c 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/ConfigurationHelper.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/ConfigurationHelper.java @@ -162,7 +162,13 @@ public class ConfigurationHelper { } String value = prop.toString(); - Boolean useMask = (Boolean) props.get(defaultMaskPassword); + Object useMaskObject = props.get(defaultMaskPassword); + Boolean useMask; + if (useMaskObject instanceof String) { + useMask = Boolean.parseBoolean((String)useMaskObject); + } else { + useMask = (Boolean) useMaskObject; + } final String classImpl = (String) props.get(defaultPasswordCodec); try { return PasswordMaskingUtil.resolveMask(useMask, value, classImpl); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/a6fe2559/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverOneWaySSLTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverOneWaySSLTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverOneWaySSLTest.java index c9bf35e..aeb7524 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverOneWaySSLTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverOneWaySSLTest.java @@ -44,6 +44,8 @@ import org.apache.activemq.artemis.core.remoting.impl.ssl.SSLSupport; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; +import org.apache.activemq.artemis.utils.DefaultSensitiveStringCodec; +import org.apache.activemq.artemis.utils.PasswordMaskingUtil; import org.apache.activemq.artemis.utils.RandomUtil; import org.junit.Assert; import org.junit.Before; @@ -133,6 +135,84 @@ public class CoreClientOverOneWaySSLTest extends ActiveMQTestBase { } @Test + public void testOneWaySSLwithURL() throws Exception { + createCustomSslServer(); + String text = RandomUtil.randomString(); + + ServerLocator locator = addServerLocator(ActiveMQClient.createServerLocator("tcp://127.0.0.1:61616?sslEnabled=true;trustStoreProvider=" + storeType + ";trustStorePath=" + CLIENT_SIDE_TRUSTSTORE + ";trustStorePassword=" + PASSWORD)); + ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator)); + ClientSession session = addClientSession(sf.createSession(false, true, true)); + session.createQueue(CoreClientOverOneWaySSLTest.QUEUE, CoreClientOverOneWaySSLTest.QUEUE, false); + ClientProducer producer = addClientProducer(session.createProducer(CoreClientOverOneWaySSLTest.QUEUE)); + + ClientMessage message = createTextMessage(session, text); + producer.send(message); + + ClientConsumer consumer = addClientConsumer(session.createConsumer(CoreClientOverOneWaySSLTest.QUEUE)); + session.start(); + + ClientMessage m = consumer.receive(1000); + Assert.assertNotNull(m); + Assert.assertEquals(text, m.getBodyBuffer().readString()); + } + + @Test + public void testOneWaySSLwithURLandMaskedPasswordProperty() throws Exception { + createCustomSslServer(); + String text = RandomUtil.randomString(); + + DefaultSensitiveStringCodec codec = PasswordMaskingUtil.getDefaultCodec(); + Map<String, String> params = new HashMap<>(); + codec.init(params); + + String masked = codec.encode(PASSWORD); + + ServerLocator locator = addServerLocator(ActiveMQClient.createServerLocator("tcp://127.0.0.1:61616?sslEnabled=true;trustStoreProvider=" + storeType + ";trustStorePath=" + CLIENT_SIDE_TRUSTSTORE + ";trustStorePassword=" + masked + ";activemq.usemaskedpassword=true")); + ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator)); + ClientSession session = addClientSession(sf.createSession(false, true, true)); + session.createQueue(CoreClientOverOneWaySSLTest.QUEUE, CoreClientOverOneWaySSLTest.QUEUE, false); + ClientProducer producer = addClientProducer(session.createProducer(CoreClientOverOneWaySSLTest.QUEUE)); + + ClientMessage message = createTextMessage(session, text); + producer.send(message); + + ClientConsumer consumer = addClientConsumer(session.createConsumer(CoreClientOverOneWaySSLTest.QUEUE)); + session.start(); + + ClientMessage m = consumer.receive(1000); + Assert.assertNotNull(m); + Assert.assertEquals(text, m.getBodyBuffer().readString()); + } + + @Test + public void testOneWaySSLwithURLandMaskedPasswordENCSyntax() throws Exception { + createCustomSslServer(); + String text = RandomUtil.randomString(); + + DefaultSensitiveStringCodec codec = PasswordMaskingUtil.getDefaultCodec(); + Map<String, String> params = new HashMap<>(); + codec.init(params); + + String masked = codec.encode(PASSWORD); + + ServerLocator locator = addServerLocator(ActiveMQClient.createServerLocator("tcp://127.0.0.1:61616?sslEnabled=true;trustStoreProvider=" + storeType + ";trustStorePath=" + CLIENT_SIDE_TRUSTSTORE + ";trustStorePassword=ENC(" + masked + ")")); + ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator)); + ClientSession session = addClientSession(sf.createSession(false, true, true)); + session.createQueue(CoreClientOverOneWaySSLTest.QUEUE, CoreClientOverOneWaySSLTest.QUEUE, false); + ClientProducer producer = addClientProducer(session.createProducer(CoreClientOverOneWaySSLTest.QUEUE)); + + ClientMessage message = createTextMessage(session, text); + producer.send(message); + + ClientConsumer consumer = addClientConsumer(session.createConsumer(CoreClientOverOneWaySSLTest.QUEUE)); + session.start(); + + ClientMessage m = consumer.receive(1000); + Assert.assertNotNull(m); + Assert.assertEquals(text, m.getBodyBuffer().readString()); + } + + @Test public void testOneWaySSLUsingDefaultSslContext() throws Exception { createCustomSslServer(); String text = RandomUtil.randomString();
