This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/master by this push:
new 410a552 ARTEMIS-2711 use peer host:port for acceptor SSL engine
new 93b68eb This closes #3081
410a552 is described below
commit 410a552894140cc9fac5cd1fed5b5d21cda999cb
Author: Justin Bertram <[email protected]>
AuthorDate: Tue Apr 14 11:01:46 2020 -0500
ARTEMIS-2711 use peer host:port for acceptor SSL engine
---
.../core/remoting/impl/netty/NettyAcceptor.java | 33 ++++++++++++++-------
.../ssl/CoreClientOverTwoWayOpenSSLServerTest.java | 29 +-----------------
.../ssl/CoreClientOverTwoWayOpenSSLTest.java | 4 +--
.../ssl/CoreClientOverTwoWaySSLTest.java | 6 ++--
.../resources/verified-client-side-keystore.jceks | Bin 2203 -> 2222 bytes
.../resources/verified-client-side-keystore.jks | Bin 2226 -> 2242 bytes
.../resources/verified-client-side-keystore.p12 | Bin 2565 -> 2581 bytes
.../verified-openssl-client-side-keystore.jceks | Bin 655 -> 674 bytes
.../verified-openssl-client-side-keystore.jks | Bin 679 -> 695 bytes
.../verified-openssl-server-side-truststore.jceks | Bin 543 -> 560 bytes
.../verified-openssl-server-side-truststore.jks | Bin 544 -> 560 bytes
.../verified-server-side-truststore.jceks | Bin 935 -> 952 bytes
.../resources/verified-server-side-truststore.jks | Bin 935 -> 952 bytes
.../resources/verified-server-side-truststore.p12 | Bin 1162 -> 1186 bytes
14 files changed, 29 insertions(+), 43 deletions(-)
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 3b0234b..924f335 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
@@ -73,6 +73,7 @@ import io.netty.util.concurrent.GenericFutureListener;
import io.netty.util.concurrent.GlobalEventExecutor;
import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
import org.apache.activemq.artemis.api.core.ActiveMQException;
+import org.apache.activemq.artemis.api.core.Pair;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.management.CoreNotificationType;
@@ -404,12 +405,24 @@ public class NettyAcceptor extends AbstractAcceptor {
@Override
public void initChannel(Channel channel) throws Exception {
ChannelPipeline pipeline = channel.pipeline();
+ Pair<String, Integer> peerInfo = getPeerInfo(channel);
if (sslEnabled) {
- pipeline.addLast("ssl", getSslHandler(channel.alloc()));
+ pipeline.addLast("ssl", getSslHandler(channel.alloc(),
peerInfo.getA(), peerInfo.getB()));
pipeline.addLast("sslHandshakeExceptionHandler", new
SslHandshakeExceptionHandler());
}
pipeline.addLast(protocolHandler.getProtocolDecoder());
}
+
+ private Pair<String, Integer> getPeerInfo(Channel channel) {
+ try {
+ String[] peerInfo =
channel.remoteAddress().toString().replace("/", "").split(":");
+ return new Pair<>(peerInfo[0], Integer.parseInt(peerInfo[1]));
+ } catch (Exception e) {
+ logger.debug("Failed to parse peer info for SSL engine
initialization", e);
+ }
+
+ return new Pair<>(null, 0);
+ }
};
bootstrap.childHandler(factory);
@@ -498,12 +511,12 @@ public class NettyAcceptor extends AbstractAcceptor {
startServerChannels();
}
- public synchronized SslHandler getSslHandler(ByteBufAllocator alloc) throws
Exception {
+ public synchronized SslHandler getSslHandler(ByteBufAllocator alloc, String
peerHost, int peerPort) throws Exception {
SSLEngine engine;
if (sslProvider.equals(TransportConstants.OPENSSL_PROVIDER)) {
- engine = loadOpenSslEngine(alloc);
+ engine = loadOpenSslEngine(alloc, peerHost, peerPort);
} else {
- engine = loadJdkSslEngine();
+ engine = loadJdkSslEngine(peerHost, peerPort);
}
engine.setUseClientMode(false);
@@ -572,7 +585,7 @@ public class NettyAcceptor extends AbstractAcceptor {
return new SslHandler(engine);
}
- private SSLEngine loadJdkSslEngine() throws Exception {
+ private SSLEngine loadJdkSslEngine(String peerHost, int peerPort) throws
Exception {
final SSLContext context;
try {
if (kerb5Config == null && keyStorePath == null &&
TransportConstants.DEFAULT_TRUSTSTORE_PROVIDER.equals(keyStoreProvider))
@@ -602,8 +615,8 @@ public class NettyAcceptor extends AbstractAcceptor {
SSLEngine engine = Subject.doAs(subject, new
PrivilegedExceptionAction<SSLEngine>() {
@Override
public SSLEngine run() {
- if (verifyHost) {
- return context.createSSLEngine(host, port);
+ if (peerHost != null && peerPort != 0) {
+ return context.createSSLEngine(peerHost, peerPort);
} else {
return context.createSSLEngine();
}
@@ -612,7 +625,7 @@ public class NettyAcceptor extends AbstractAcceptor {
return engine;
}
- private SSLEngine loadOpenSslEngine(ByteBufAllocator alloc) throws
Exception {
+ private SSLEngine loadOpenSslEngine(ByteBufAllocator alloc, String
peerHost, int peerPort) throws Exception {
final SslContext context;
try {
if (kerb5Config == null && keyStorePath == null &&
TransportConstants.DEFAULT_TRUSTSTORE_PROVIDER.equals(keyStoreProvider))
@@ -642,8 +655,8 @@ public class NettyAcceptor extends AbstractAcceptor {
SSLEngine engine = Subject.doAs(subject, new
PrivilegedExceptionAction<SSLEngine>() {
@Override
public SSLEngine run() {
- if (verifyHost) {
- return context.newEngine(alloc, host, port);
+ if (peerHost != null && peerPort != 0) {
+ return context.newEngine(alloc, peerHost, peerPort);
} else {
return context.newEngine(alloc);
}
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLServerTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLServerTest.java
index f7fcca8..78502ec 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLServerTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLServerTest.java
@@ -74,34 +74,7 @@ public class CoreClientOverTwoWayOpenSSLServerTest extends
ActiveMQTestBase {
public static final SimpleString QUEUE = new SimpleString("QueueOverSSL");
/**
- * These artifacts are required for testing 2-way SSL with open SSL - note
the EC key and ECDSA signature to comply with what OpenSSL offers
- *
- * Commands to create the JKS artifacts:
- * keytool -genkey -keystore openssl-client-side-keystore.jks -storepass
secureexample -keypass secureexample -dname "CN=ActiveMQ Artemis Client,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg SHA256withECDSA
- * keytool -export -keystore openssl-client-side-keystore.jks -file
activemq-jks.cer -storepass secureexample
- * keytool -import -keystore openssl-server-side-truststore.jks -file
activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
- *
- * keytool -genkey -keystore openssl-server-side-keystore.jks -storepass
secureexample -keypass secureexample -dname "CN=ActiveMQ Artemis Server,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg SHA256withECDSA
- * keytool -export -keystore openssl-server-side-keystore.jks -file
activemq-jks.cer -storepass secureexample
- * keytool -import -keystore openssl-client-side-truststore.jks -file
activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
- *
- * keytool -genkey -keystore verified-openssl-client-side-keystore.jks
-storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg SHA256withECDSA
- * keytool -export -keystore verified-openssl-client-side-keystore.jks
-file activemq-jks.cer -storepass secureexample
- * keytool -import -keystore verified-openssl-server-side-truststore.jks
-file activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
- *
- * Commands to create the JCEKS artifacts:
- * keytool -genkey -keystore openssl-client-side-keystore.jceks -storetype
JCEKS -storepass secureexample -keypass secureexample -dname "CN=ActiveMQ
Artemis Client, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC
-sigalg SHA256withECDSA
- * keytool -export -keystore openssl-client-side-keystore.jceks -file
activemq-jceks.cer -storetype jceks -storepass secureexample
- * keytool -import -keystore openssl-server-side-truststore.jceks
-storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass
secureexample -noprompt
- *
- * keytool -genkey -keystore openssl-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" -keyalg EC
-sigalg SHA256withECDSA
- * keytool -export -keystore openssl-server-side-keystore.jceks -file
activemq-jceks.cer -storetype jceks -storepass secureexample
- * keytool -import -keystore openssl-client-side-truststore.jceks
-storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass
secureexample -noprompt
- *
- * keytool -genkey -keystore verified-openssl-client-side-keystore.jceks
-storetype JCEKS -storepass secureexample -keypass secureexample -dname
"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg
SHA256withECDSA
- * keytool -export -keystore verified-openssl-client-side-keystore.jceks
-file activemq-jceks.cer -storetype jceks -storepass secureexample
- * keytool -import -keystore verified-openssl-server-side-truststore.jceks
-storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass
secureexample -noprompt
- *
+ * See {@link CoreClientOverTwoWayOpenSSLTest} for details about the SSL
artifacts needed for this test.
*/
private String storeType;
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLTest.java
index e557dac..cdb8d03 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWayOpenSSLTest.java
@@ -85,7 +85,7 @@ public class CoreClientOverTwoWayOpenSSLTest extends
ActiveMQTestBase {
* keytool -export -keystore openssl-server-side-keystore.jks -file
activemq-jks.cer -storepass secureexample
* keytool -import -keystore openssl-client-side-truststore.jks -file
activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
*
- * keytool -genkey -keystore verified-openssl-client-side-keystore.jks
-storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg SHA256withECDSA
+ * keytool -genkey -keystore verified-openssl-client-side-keystore.jks
-storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg SHA256withECDSA
-ext san=ip:127.0.0.1
* keytool -export -keystore verified-openssl-client-side-keystore.jks
-file activemq-jks.cer -storepass secureexample
* keytool -import -keystore verified-openssl-server-side-truststore.jks
-file activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
*
@@ -98,7 +98,7 @@ public class CoreClientOverTwoWayOpenSSLTest extends
ActiveMQTestBase {
* keytool -export -keystore openssl-server-side-keystore.jceks -file
activemq-jceks.cer -storetype jceks -storepass secureexample
* keytool -import -keystore openssl-client-side-truststore.jceks
-storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass
secureexample -noprompt
*
- * keytool -genkey -keystore verified-openssl-client-side-keystore.jceks
-storetype JCEKS -storepass secureexample -keypass secureexample -dname
"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg
SHA256withECDSA
+ * keytool -genkey -keystore verified-openssl-client-side-keystore.jceks
-storetype JCEKS -storepass secureexample -keypass secureexample -dname
"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg EC -sigalg
SHA256withECDSA -ext san=ip:127.0.0.1
* keytool -export -keystore verified-openssl-client-side-keystore.jceks
-file activemq-jceks.cer -storetype jceks -storepass secureexample
* keytool -import -keystore verified-openssl-server-side-truststore.jceks
-storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass
secureexample -noprompt
*
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWaySSLTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWaySSLTest.java
index adf6951..b195f14 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWaySSLTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ssl/CoreClientOverTwoWaySSLTest.java
@@ -85,7 +85,7 @@ public class CoreClientOverTwoWaySSLTest extends
ActiveMQTestBase {
* keytool -export -keystore client-side-keystore.jks -file
activemq-jks.cer -storepass secureexample
* keytool -import -keystore server-side-truststore.jks -file
activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
*
- * keytool -genkey -keystore verified-client-side-keystore.jks -storepass
secureexample -keypass secureexample -dname "CN=localhost, OU=Artemis,
O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
+ * keytool -genkey -keystore verified-client-side-keystore.jks -storepass
secureexample -keypass secureexample -dname "CN=ActiveMQ Artemis Client,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA -ext san=ip:127.0.0.1
* keytool -export -keystore verified-client-side-keystore.jks -file
activemq-jks.cer -storepass secureexample
* keytool -import -keystore verified-server-side-truststore.jks -file
activemq-jks.cer -storepass secureexample -keypass secureexample -noprompt
*
@@ -94,7 +94,7 @@ public class CoreClientOverTwoWaySSLTest extends
ActiveMQTestBase {
* keytool -export -keystore client-side-keystore.jceks -file
activemq-jceks.cer -storetype jceks -storepass secureexample
* keytool -import -keystore server-side-truststore.jceks -storetype JCEKS
-file activemq-jceks.cer -storepass secureexample -keypass secureexample
-noprompt
*
- * keytool -genkey -keystore verified-client-side-keystore.jceks -storetype
JCEKS -storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
+ * keytool -genkey -keystore verified-client-side-keystore.jceks -storetype
JCEKS -storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA -ext san=ip:127.0.0.1
* keytool -export -keystore verified-client-side-keystore.jceks -file
activemq-jceks.cer -storetype jceks -storepass secureexample
* keytool -import -keystore verified-server-side-truststore.jceks
-storetype JCEKS -file activemq-jceks.cer -storepass secureexample -keypass
secureexample -noprompt
*
@@ -103,7 +103,7 @@ public class CoreClientOverTwoWaySSLTest extends
ActiveMQTestBase {
* keytool -export -keystore client-side-keystore.p12 -file
activemq-p12.cer -storetype PKCS12 -storepass secureexample
* keytool -import -keystore server-side-truststore.p12 -storetype PKCS12
-file activemq-p12.cer -storepass secureexample -keypass secureexample -noprompt
*
- * keytool -genkey -keystore verified-client-side-keystore.p12 -storetype
PKCS12 -storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
+ * keytool -genkey -keystore verified-client-side-keystore.p12 -storetype
PKCS12 -storepass secureexample -keypass secureexample -dname "CN=localhost,
OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA -ext san=ip:127.0.0.1
* keytool -export -keystore verified-client-side-keystore.p12 -file
activemq-p12.cer -storetype PKCS12 -storepass secureexample
* keytool -import -keystore verified-server-side-truststore.p12 -storetype
PKCS12 -file activemq-p12.cer -storepass secureexample -keypass secureexample
-noprompt
*/
diff --git
a/tests/unit-tests/src/test/resources/verified-client-side-keystore.jceks
b/tests/unit-tests/src/test/resources/verified-client-side-keystore.jceks
index 250832b..b8dad47 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-client-side-keystore.jceks and
b/tests/unit-tests/src/test/resources/verified-client-side-keystore.jceks differ
diff --git
a/tests/unit-tests/src/test/resources/verified-client-side-keystore.jks
b/tests/unit-tests/src/test/resources/verified-client-side-keystore.jks
index 88e7e40..e9980c3 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-client-side-keystore.jks and
b/tests/unit-tests/src/test/resources/verified-client-side-keystore.jks differ
diff --git
a/tests/unit-tests/src/test/resources/verified-client-side-keystore.p12
b/tests/unit-tests/src/test/resources/verified-client-side-keystore.p12
index 3cee34a..2ece21e 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-client-side-keystore.p12 and
b/tests/unit-tests/src/test/resources/verified-client-side-keystore.p12 differ
diff --git
a/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jceks
b/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jceks
index fc8c4cc..d2f4128 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jceks
and
b/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jceks
differ
diff --git
a/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jks
b/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jks
index d60a9e7..5c25213 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jks
and
b/tests/unit-tests/src/test/resources/verified-openssl-client-side-keystore.jks
differ
diff --git
a/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jceks
b/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jceks
index c91e3f2..d1b2122 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jceks
and
b/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jceks
differ
diff --git
a/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jks
b/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jks
index 22fda4b..6be63f5 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jks
and
b/tests/unit-tests/src/test/resources/verified-openssl-server-side-truststore.jks
differ
diff --git
a/tests/unit-tests/src/test/resources/verified-server-side-truststore.jceks
b/tests/unit-tests/src/test/resources/verified-server-side-truststore.jceks
index e2bd4b3..54fbaa7 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-server-side-truststore.jceks and
b/tests/unit-tests/src/test/resources/verified-server-side-truststore.jceks
differ
diff --git
a/tests/unit-tests/src/test/resources/verified-server-side-truststore.jks
b/tests/unit-tests/src/test/resources/verified-server-side-truststore.jks
index 8d2288a..ec96e7b 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-server-side-truststore.jks and
b/tests/unit-tests/src/test/resources/verified-server-side-truststore.jks differ
diff --git
a/tests/unit-tests/src/test/resources/verified-server-side-truststore.p12
b/tests/unit-tests/src/test/resources/verified-server-side-truststore.p12
index 619adb2..5da5615 100644
Binary files
a/tests/unit-tests/src/test/resources/verified-server-side-truststore.p12 and
b/tests/unit-tests/src/test/resources/verified-server-side-truststore.p12 differ