You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2016/04/18 23:51:56 UTC
[2/2] activemq-artemis git commit: ARTEMIS-400 allow SSL store reload
ARTEMIS-400 allow SSL store reload
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/30907ffd
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/30907ffd
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/30907ffd
Branch: refs/heads/master
Commit: 30907ffd8cdc78efb7a59e0425fe4e8e1b920648
Parents: 1363d6e
Author: jbertram <jb...@apache.org>
Authored: Thu Feb 11 16:07:32 2016 -0600
Committer: Clebert Suconic <cl...@apache.org>
Committed: Mon Apr 18 17:51:46 2016 -0400
----------------------------------------------------------------------
.../api/core/management/AcceptorControl.java | 6 +
.../management/impl/AcceptorControlImpl.java | 11 ++
.../core/remoting/impl/invm/InVMAcceptor.java | 5 +
.../core/remoting/impl/netty/NettyAcceptor.java | 156 ++++++++++---------
.../artemis/spi/core/remoting/Acceptor.java | 6 +
.../AcceptorControlUsingCoreTest.java | 10 ++
.../ssl/CoreClientOverOneWaySSLTest.java | 72 ++++++++-
.../server/impl/fake/FakeAcceptorFactory.java | 5 +
.../other-client-side-truststore.jceks | Bin 0 -> 908 bytes
.../resources/other-client-side-truststore.jks | Bin 0 -> 975 bytes
.../resources/other-server-side-keystore.jceks | Bin 0 -> 1288 bytes
.../resources/other-server-side-keystore.jks | Bin 0 -> 2264 bytes
12 files changed, 193 insertions(+), 78 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AcceptorControl.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AcceptorControl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AcceptorControl.java
index 97e4987..45df0df 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AcceptorControl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AcceptorControl.java
@@ -41,4 +41,10 @@ public interface AcceptorControl extends ActiveMQComponentControl {
*/
@Attribute(desc = "parameters used to configure this acceptor")
Map<String, Object> getParameters();
+
+ /**
+ * Re-create the acceptor with the existing configuration values. Useful, for example, for reloading key/trust
+ * stores on acceptors which support SSL.
+ */
+ void reload();
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AcceptorControlImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AcceptorControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AcceptorControlImpl.java
index ac6950d..ae7660b 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AcceptorControlImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AcceptorControlImpl.java
@@ -84,6 +84,17 @@ public class AcceptorControlImpl extends AbstractControl implements AcceptorCont
}
@Override
+ public void reload() {
+ clearIO();
+ try {
+ acceptor.reload();
+ }
+ finally {
+ blockOnIO();
+ }
+ }
+
+ @Override
public boolean isStarted() {
clearIO();
try {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
index 2967b2a..190a5d1 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMAcceptor.java
@@ -248,6 +248,11 @@ public final class InVMAcceptor extends AbstractAcceptor {
}
@Override
+ public void reload() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public void setDefaultActiveMQPrincipal(ActiveMQPrincipal defaultActiveMQPrincipal) {
this.defaultActiveMQPrincipal = defaultActiveMQPrincipal;
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
index 3da612f..48922aa 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
@@ -32,7 +32,6 @@ import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
@@ -121,7 +120,8 @@ public class NettyAcceptor extends AbstractAcceptor {
private final String keyStoreProvider;
- private final String keyStorePath;
+ // non-final for testing purposes
+ private String keyStorePath;
private final String keyStorePassword;
@@ -282,87 +282,13 @@ public class NettyAcceptor extends AbstractAcceptor {
bootstrap = new ServerBootstrap();
bootstrap.group(eventLoopGroup);
bootstrap.channel(channelClazz);
- final SSLContext context;
- if (sslEnabled) {
- try {
- if (keyStorePath == null && TransportConstants.DEFAULT_TRUSTSTORE_PROVIDER.equals(keyStoreProvider))
- throw new IllegalArgumentException("If \"" + TransportConstants.SSL_ENABLED_PROP_NAME +
- "\" is true then \"" + TransportConstants.KEYSTORE_PATH_PROP_NAME + "\" must be non-null " +
- "unless an alternative \"" + TransportConstants.KEYSTORE_PROVIDER_PROP_NAME + "\" has been specified.");
- context = SSLSupport.createContext(keyStoreProvider, keyStorePath, keyStorePassword, trustStoreProvider, trustStorePath, trustStorePassword);
- }
- catch (Exception e) {
- IllegalStateException ise = new IllegalStateException("Unable to create NettyAcceptor for " + host +
- ":" + port);
- ise.initCause(e);
- throw ise;
- }
- }
- else {
- context = null; // Unused
- }
-
- final AtomicBoolean warningPrinted = new AtomicBoolean(false);
ChannelInitializer<Channel> factory = new ChannelInitializer<Channel>() {
@Override
public void initChannel(Channel channel) throws Exception {
ChannelPipeline pipeline = channel.pipeline();
if (sslEnabled) {
- SSLEngine engine = context.createSSLEngine();
-
- engine.setUseClientMode(false);
-
- if (needClientAuth)
- engine.setNeedClientAuth(true);
-
- // setting the enabled cipher suites resets the enabled protocols so we need
- // to save the enabled protocols so that after the customer cipher suite is enabled
- // we can reset the enabled protocols if a customer protocol isn't specified
- String[] originalProtocols = engine.getEnabledProtocols();
-
- if (enabledCipherSuites != null) {
- try {
- engine.setEnabledCipherSuites(SSLSupport.parseCommaSeparatedListIntoArray(enabledCipherSuites));
- }
- catch (IllegalArgumentException e) {
- ActiveMQServerLogger.LOGGER.invalidCipherSuite(SSLSupport.parseArrayIntoCommandSeparatedList(engine.getSupportedCipherSuites()));
- throw e;
- }
- }
-
- if (enabledProtocols != null) {
- try {
- engine.setEnabledProtocols(SSLSupport.parseCommaSeparatedListIntoArray(enabledProtocols));
- }
- catch (IllegalArgumentException e) {
- ActiveMQServerLogger.LOGGER.invalidProtocol(SSLSupport.parseArrayIntoCommandSeparatedList(engine.getSupportedProtocols()));
- throw e;
- }
- }
- else {
- engine.setEnabledProtocols(originalProtocols);
- }
-
- // Strip "SSLv3" from the current enabled protocols to address the POODLE exploit.
- // This recommendation came from http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html
- String[] protocols = engine.getEnabledProtocols();
- Set<String> set = new HashSet<>();
- for (String s : protocols) {
- if (s.equals("SSLv3") || s.equals("SSLv2Hello")) {
- if (!warningPrinted.get()) {
- ActiveMQServerLogger.LOGGER.disallowedProtocol(s);
- }
- continue;
- }
- set.add(s);
- }
- warningPrinted.set(true);
- engine.setEnabledProtocols(set.toArray(new String[set.size()]));
-
- SslHandler handler = new SslHandler(engine);
-
- pipeline.addLast("ssl", handler);
+ pipeline.addLast("ssl", getSslHandler());
}
pipeline.addLast(protocolHandler.getProtocolDecoder());
}
@@ -421,6 +347,11 @@ public class NettyAcceptor extends AbstractAcceptor {
return name;
}
+ // only for testing purposes
+ public void setKeyStorePath(String keyStorePath) {
+ this.keyStorePath = keyStorePath;
+ }
+
/**
* Transfers the Netty channel that has been created outside of this NettyAcceptor
* to control it and configure it according to this NettyAcceptor setting.
@@ -434,6 +365,77 @@ public class NettyAcceptor extends AbstractAcceptor {
channel.pipeline().addLast(protocolHandler.getProtocolDecoder());
}
+ public void reload() {
+ serverChannelGroup.disconnect();
+ serverChannelGroup.clear();
+ startServerChannels();
+ }
+
+ public synchronized SslHandler getSslHandler() throws Exception {
+ final SSLContext context;
+ try {
+ if (keyStorePath == null && TransportConstants.DEFAULT_TRUSTSTORE_PROVIDER.equals(keyStoreProvider))
+ throw new IllegalArgumentException("If \"" + TransportConstants.SSL_ENABLED_PROP_NAME +
+ "\" is true then \"" + TransportConstants.KEYSTORE_PATH_PROP_NAME + "\" must be non-null " +
+ "unless an alternative \"" + TransportConstants.KEYSTORE_PROVIDER_PROP_NAME + "\" has been specified.");
+ context = SSLSupport.createContext(keyStoreProvider, keyStorePath, keyStorePassword, trustStoreProvider, trustStorePath, trustStorePassword);
+ }
+ catch (Exception e) {
+ IllegalStateException ise = new IllegalStateException("Unable to create NettyAcceptor for " + host + ":" + port);
+ ise.initCause(e);
+ throw ise;
+ }
+ SSLEngine engine = context.createSSLEngine();
+
+ engine.setUseClientMode(false);
+
+ if (needClientAuth)
+ engine.setNeedClientAuth(true);
+
+ // setting the enabled cipher suites resets the enabled protocols so we need
+ // to save the enabled protocols so that after the customer cipher suite is enabled
+ // we can reset the enabled protocols if a customer protocol isn't specified
+ String[] originalProtocols = engine.getEnabledProtocols();
+
+ if (enabledCipherSuites != null) {
+ try {
+ engine.setEnabledCipherSuites(SSLSupport.parseCommaSeparatedListIntoArray(enabledCipherSuites));
+ }
+ catch (IllegalArgumentException e) {
+ ActiveMQServerLogger.LOGGER.invalidCipherSuite(SSLSupport.parseArrayIntoCommandSeparatedList(engine.getSupportedCipherSuites()));
+ throw e;
+ }
+ }
+
+ if (enabledProtocols != null) {
+ try {
+ engine.setEnabledProtocols(SSLSupport.parseCommaSeparatedListIntoArray(enabledProtocols));
+ }
+ catch (IllegalArgumentException e) {
+ ActiveMQServerLogger.LOGGER.invalidProtocol(SSLSupport.parseArrayIntoCommandSeparatedList(engine.getSupportedProtocols()));
+ throw e;
+ }
+ }
+ else {
+ engine.setEnabledProtocols(originalProtocols);
+ }
+
+ // Strip "SSLv3" from the current enabled protocols to address the POODLE exploit.
+ // This recommendation came from http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html
+ String[] protocols = engine.getEnabledProtocols();
+ Set<String> set = new HashSet<>();
+ for (String s : protocols) {
+ if (s.equalsIgnoreCase("SSLv3") || s.equals("SSLv2Hello")) {
+ ActiveMQServerLogger.LOGGER.disallowedProtocol(s);
+ continue;
+ }
+ set.add(s);
+ }
+
+ engine.setEnabledProtocols(set.toArray(new String[set.size()]));
+ return new SslHandler(engine);
+ }
+
private void startServerChannels() {
String[] hosts = TransportConfiguration.splitHosts(host);
for (String h : hosts) {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Acceptor.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Acceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Acceptor.java
index b4c1952..c0da381 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Acceptor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Acceptor.java
@@ -70,4 +70,10 @@ public interface Acceptor extends ActiveMQComponent {
* @throws java.lang.IllegalStateException if false @setDefaultActiveMQPrincipal
*/
boolean isUnsecurable();
+
+ /**
+ * Re-create the acceptor with the existing configuration values. Useful, for example, for reloading key/trust
+ * stores on acceptors which support SSL.
+ */
+ void reload();
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AcceptorControlUsingCoreTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AcceptorControlUsingCoreTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AcceptorControlUsingCoreTest.java
index d5c7b65..8039e98 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AcceptorControlUsingCoreTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AcceptorControlUsingCoreTest.java
@@ -69,6 +69,16 @@ public class AcceptorControlUsingCoreTest extends AcceptorControlTest {
}
@Override
+ public void reload() {
+ try {
+ proxy.invokeOperation("reload");
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
public boolean isStarted() {
return (Boolean) proxy.retrieveAttributeValue("started");
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/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 f23e580..50ac998 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
@@ -36,6 +36,7 @@ import org.apache.activemq.artemis.api.core.client.ClientSession;
import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
import org.apache.activemq.artemis.api.core.client.ServerLocator;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor;
import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.apache.activemq.artemis.utils.RandomUtil;
@@ -73,10 +74,18 @@ public class CoreClientOverOneWaySSLTest extends ActiveMQTestBase {
* keytool -export -keystore server-side-keystore.jks -file activemq-jks.cer -storepass secureexample
* keytool -import -keystore client-side-truststore.jks -file activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
*
+ * keytool -genkey -keystore other-server-side-keystore.jks -storepass secureexample -keypass secureexample -dname "CN=Other ActiveMQ Artemis Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
+ * keytool -export -keystore other-server-side-keystore.jks -file activemq-jks.cer -storepass secureexample
+ * keytool -import -keystore other-client-side-truststore.jks -file activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
+ *
* Commands to create the JCEKS artifacts:
* keytool -genkey -keystore server-side-keystore.jceks -storetype JCEKS -storepass secureexample -keypass secureexample -dname "CN=ActiveMQ Artemis Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ"
* keytool -export -keystore server-side-keystore.jceks -file activemq-jceks.cer -storetype jceks -storepass secureexample
* keytool -import -keystore client-side-truststore.jceks -storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass secureexample -noprompt
+ *
+ * keytool -genkey -keystore other-server-side-keystore.jceks -storetype JCEKS -storepass secureexample -keypass secureexample -dname "CN=Other ActiveMQ Artemis Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ"
+ * keytool -export -keystore other-server-side-keystore.jceks -file activemq-jceks.cer -storetype jceks -storepass secureexample
+ * keytool -import -keystore other-client-side-truststore.jceks -storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass secureexample -noprompt
*/
private String storeType;
private String SERVER_SIDE_KEYSTORE;
@@ -115,6 +124,67 @@ public class CoreClientOverOneWaySSLTest extends ActiveMQTestBase {
}
@Test
+ public void testOneWaySSLReloaded() throws Exception {
+ createCustomSslServer();
+ server.createQueue(CoreClientOverOneWaySSLTest.QUEUE, CoreClientOverOneWaySSLTest.QUEUE, null, false, false);
+ String text = RandomUtil.randomString();
+
+ // create a valid SSL connection and keep it for use later
+ tc.getParams().put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
+ tc.getParams().put(TransportConstants.TRUSTSTORE_PROVIDER_PROP_NAME, storeType);
+ tc.getParams().put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, CLIENT_SIDE_TRUSTSTORE);
+ tc.getParams().put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, PASSWORD);
+
+ ServerLocator existingLocator = addServerLocator(ActiveMQClient.createServerLocatorWithoutHA(tc));
+ existingLocator.setCallTimeout(3000);
+ ClientSessionFactory existingSessionFactory = addSessionFactory(createSessionFactory(existingLocator));
+ ClientSession existingSession = addClientSession(existingSessionFactory.createSession(false, true, true));
+ ClientConsumer existingConsumer = addClientConsumer(existingSession.createConsumer(CoreClientOverOneWaySSLTest.QUEUE));
+
+ // create an invalid SSL connection
+ tc.getParams().put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
+ tc.getParams().put(TransportConstants.TRUSTSTORE_PROVIDER_PROP_NAME, storeType);
+ tc.getParams().put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, "other-client-side-truststore." + storeType.toLowerCase());
+ tc.getParams().put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, PASSWORD);
+
+ ServerLocator locator = addServerLocator(ActiveMQClient.createServerLocatorWithoutHA(tc)).setCallTimeout(3000);
+ try {
+ addSessionFactory(createSessionFactory(locator));
+ fail("Creating session here should fail due to SSL handshake problems.");
+ }
+ catch (Exception e) {
+ // ignore
+ }
+
+ // reload the acceptor to reload the SSL stores
+ NettyAcceptor acceptor = (NettyAcceptor) server.getRemotingService().getAcceptor("nettySSL");
+ acceptor.setKeyStorePath("other-server-side-keystore." + storeType.toLowerCase());
+ acceptor.reload();
+
+ // create a session with the locator which failed previously proving that the SSL stores have been reloaded
+ ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
+ ClientSession session = addClientSession(sf.createSession(false, true, true));
+ ClientProducer producer = addClientProducer(session.createProducer(CoreClientOverOneWaySSLTest.QUEUE));
+
+ ClientMessage message = createTextMessage(session, text);
+ producer.send(message);
+ producer.send(message);
+
+ ClientConsumer consumer = addClientConsumer(session.createConsumer(CoreClientOverOneWaySSLTest.QUEUE));
+ session.start();
+ Message m = consumer.receive(1000);
+ Assert.assertNotNull(m);
+ Assert.assertEquals(text, m.getBodyBuffer().readString());
+ consumer.close();
+
+ // use the existing connection to prove it wasn't lost when the acceptor was reloaded
+ existingSession.start();
+ m = existingConsumer.receive(1000);
+ Assert.assertNotNull(m);
+ Assert.assertEquals(text, m.getBodyBuffer().readString());
+ }
+
+ @Test
public void testOneWaySSLWithBadClientCipherSuite() throws Exception {
createCustomSslServer();
tc.getParams().put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
@@ -533,7 +603,7 @@ public class CoreClientOverOneWaySSLTest extends ActiveMQTestBase {
params.put(TransportConstants.ENABLED_PROTOCOLS_PROP_NAME, protocols);
}
- ConfigurationImpl config = createBasicConfig().addAcceptorConfiguration(new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, params));
+ ConfigurationImpl config = createBasicConfig().addAcceptorConfiguration(new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, params, "nettySSL"));
server = createServer(false, config);
server.start();
waitForServerToStart(server);
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/remoting/server/impl/fake/FakeAcceptorFactory.java
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/remoting/server/impl/fake/FakeAcceptorFactory.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/remoting/server/impl/fake/FakeAcceptorFactory.java
index 1c15c69..b2305ec 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/remoting/server/impl/fake/FakeAcceptorFactory.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/remoting/server/impl/fake/FakeAcceptorFactory.java
@@ -90,6 +90,11 @@ public class FakeAcceptorFactory implements AcceptorFactory {
}
@Override
+ public void reload() {
+
+ }
+
+ @Override
public void start() throws Exception {
started = true;
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/tests/unit-tests/src/test/resources/other-client-side-truststore.jceks
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/resources/other-client-side-truststore.jceks b/tests/unit-tests/src/test/resources/other-client-side-truststore.jceks
new file mode 100644
index 0000000..91c4caf
Binary files /dev/null and b/tests/unit-tests/src/test/resources/other-client-side-truststore.jceks differ
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/tests/unit-tests/src/test/resources/other-client-side-truststore.jks
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/resources/other-client-side-truststore.jks b/tests/unit-tests/src/test/resources/other-client-side-truststore.jks
new file mode 100644
index 0000000..9098d3b
Binary files /dev/null and b/tests/unit-tests/src/test/resources/other-client-side-truststore.jks differ
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/tests/unit-tests/src/test/resources/other-server-side-keystore.jceks
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/resources/other-server-side-keystore.jceks b/tests/unit-tests/src/test/resources/other-server-side-keystore.jceks
new file mode 100644
index 0000000..be26131
Binary files /dev/null and b/tests/unit-tests/src/test/resources/other-server-side-keystore.jceks differ
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/30907ffd/tests/unit-tests/src/test/resources/other-server-side-keystore.jks
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/resources/other-server-side-keystore.jks b/tests/unit-tests/src/test/resources/other-server-side-keystore.jks
new file mode 100644
index 0000000..8e8d1c9
Binary files /dev/null and b/tests/unit-tests/src/test/resources/other-server-side-keystore.jks differ