You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/04/02 19:30:58 UTC
[3/5] qpid-jms git commit: QPIDJMS-35: simplify alias key manager and
only use it when there is an alias given
QPIDJMS-35: simplify alias key manager and only use it when there is an alias given
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/14e40836
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/14e40836
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/14e40836
Branch: refs/heads/master
Commit: 14e40836ecb4c163ddc4c7488ffb5cac78db6cbb
Parents: fa57ac3
Author: Robert Gemmell <ro...@apache.org>
Authored: Thu Apr 2 11:50:08 2015 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Thu Apr 2 15:50:40 2015 +0100
----------------------------------------------------------------------
.../qpid/jms/transports/TransportSupport.java | 8 ++-
.../jms/transports/X509AliasKeyManager.java | 23 +++---
.../jms/transports/X509AliasKeyManagerTest.java | 75 ++++++++++++--------
3 files changed, 65 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/14e40836/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/TransportSupport.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/TransportSupport.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/TransportSupport.java
index 6a99be1..7b45ea0 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/TransportSupport.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/TransportSupport.java
@@ -183,8 +183,14 @@ public class TransportSupport {
KeyStore keyStore = loadStore(storeLocation, storePassword, storeType);
fact.init(keyStore, storePassword != null ? storePassword.toCharArray() : null);
- KeyManager[] origKeyManagers = fact.getKeyManagers();
+ if (alias == null) {
+ return fact.getKeyManagers();
+ } else {
+ return wrapKeyManagers(alias, fact.getKeyManagers());
+ }
+ }
+ private static KeyManager[] wrapKeyManagers(String alias, KeyManager[] origKeyManagers) {
KeyManager[] keyManagers = new KeyManager[origKeyManagers.length];
for (int i = 0; i < origKeyManagers.length; i++) {
KeyManager km = origKeyManagers[i];
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/14e40836/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/X509AliasKeyManager.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/X509AliasKeyManager.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/X509AliasKeyManager.java
index 585cf56..803b3ae 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/X509AliasKeyManager.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/transports/X509AliasKeyManager.java
@@ -27,26 +27,31 @@ import javax.net.ssl.SSLEngine;
import javax.net.ssl.X509ExtendedKeyManager;
/**
- * An X509ExtendedKeyManager wrapper which chooses the given alias if
- * non-null, or else delegates to the wrapped X509ExtendedKeyManager.
+ * An X509ExtendedKeyManager wrapper which always chooses and only
+ * returns the given alias, and defers retrieval to the delegate
+ * key manager.
*/
public class X509AliasKeyManager extends X509ExtendedKeyManager {
private X509ExtendedKeyManager delegate;
private String alias;
- public X509AliasKeyManager(String alias, X509ExtendedKeyManager delegate) {
+ public X509AliasKeyManager(String alias, X509ExtendedKeyManager delegate) throws IllegalArgumentException {
+ if (alias == null) {
+ throw new IllegalArgumentException("The given key alias must not be null.");
+ }
+
this.alias = alias;
this.delegate = delegate;
}
@Override
public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) {
- return alias != null ? alias : delegate.chooseClientAlias(keyType, issuers, socket);
+ return alias;
}
@Override
public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket) {
- return alias != null ? alias : delegate.chooseServerAlias(keyType, issuers, socket);
+ return alias;
}
@Override
@@ -56,7 +61,7 @@ public class X509AliasKeyManager extends X509ExtendedKeyManager {
@Override
public String[] getClientAliases(String keyType, Principal[] issuers) {
- return delegate.getClientAliases(keyType, issuers);
+ return new String[] { alias };
}
@Override
@@ -66,16 +71,16 @@ public class X509AliasKeyManager extends X509ExtendedKeyManager {
@Override
public String[] getServerAliases(String keyType, Principal[] issuers) {
- return delegate.getServerAliases(keyType, issuers);
+ return new String[] { alias };
}
@Override
public String chooseEngineClientAlias(String[] keyType, Principal[] issuers, SSLEngine engine) {
- return alias != null ? alias : delegate.chooseEngineClientAlias(keyType, issuers, engine);
+ return alias;
}
@Override
public String chooseEngineServerAlias(String keyType, Principal[] issuers, SSLEngine engine) {
- return alias != null ? alias : delegate.chooseEngineServerAlias(keyType, issuers, engine);
+ return alias;
}
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/14e40836/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
index 497f441..04e8566 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
@@ -1,7 +1,9 @@
package org.apache.qpid.jms.transports;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -11,6 +13,7 @@ import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
+import javax.net.ssl.SSLEngine;
import javax.net.ssl.X509ExtendedKeyManager;
import org.junit.Test;
@@ -18,19 +21,17 @@ import org.junit.Test;
public class X509AliasKeyManagerTest {
@Test
- public void testChooseClientAliasDelegatesWithNullWrapperAlias() {
- String wrapperAlias = null;
- String myDelegateAlias = "delegateAlias";
- X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
- when(mock.chooseClientAlias(any(String[].class), any(Principal[].class), any(Socket.class))).thenReturn(myDelegateAlias);
-
- X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
-
- assertEquals("Expected delegate alias", myDelegateAlias, wrapper.chooseClientAlias(new String[0], new Principal[0], new Socket()));
+ public void testNullAliasCausesIAE() {
+ try {
+ new X509AliasKeyManager(null, mock(X509ExtendedKeyManager.class));
+ fail("Expected an exception to be thrown");
+ } catch (IllegalArgumentException iae) {
+ // expected
+ }
}
@Test
- public void testChooseClientAliasDoesNotDelegateWithNonNullWrapperAlias() {
+ public void testChooseClientAliasReturnsGivenAlias() {
String wrapperAlias = "wrapperAlias";
String myDelegateAlias = "delegateAlias";
X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
@@ -42,19 +43,7 @@ public class X509AliasKeyManagerTest {
}
@Test
- public void testChooseServerAliasDelegatesWithNullWrapperAlias() {
- String wrapperAlias = null;
- String myDelegateAlias = "delegateAlias";
- X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
- when(mock.chooseServerAlias(any(String.class), any(Principal[].class), any(Socket.class))).thenReturn(myDelegateAlias);
-
- X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
-
- assertEquals("Expected delegate alias", myDelegateAlias, wrapper.chooseServerAlias("", new Principal[0], new Socket()));
- }
-
- @Test
- public void testChooseServerAliasDoesNotDelegateWithNonNullWrapperAlias() {
+ public void testChooseServerAliasReturnsGivenAlias() {
String wrapperAlias = "wrapperAlias";
String myDelegateAlias = "delegateAlias";
X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
@@ -79,29 +68,29 @@ public class X509AliasKeyManagerTest {
}
@Test
- public void testGetClientAliasesDelegates() {
+ public void testGetClientAliasesReturnsGivenAliasOnly() {
String wrapperAlias = "wrapperAlias";
- String[] aliases = new String[5];
+ String[] delegateAliases = new String[] { "a", "b", wrapperAlias};
X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
- when(mock.getClientAliases(any(String.class), any(Principal[].class))).thenReturn(aliases);
+ when(mock.getClientAliases(any(String.class), any(Principal[].class))).thenReturn(delegateAliases);
X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
- assertSame("Different object returned", aliases, wrapper.getClientAliases("", new Principal[0]));
+ assertArrayEquals("Expected array containing only the wrapper alias", new String[] { wrapperAlias }, wrapper.getClientAliases("", new Principal[0]));
}
@Test
- public void testGetServerAliasesDelegates() {
+ public void testGetServerAliasesReturnsGivenAliasOnly() {
String wrapperAlias = "wrapperAlias";
- String[] aliases = new String[3];
+ String[] delegateAliases = new String[] { "a", "b", wrapperAlias};
X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
- when(mock.getServerAliases(any(String.class), any(Principal[].class))).thenReturn(aliases);
+ when(mock.getServerAliases(any(String.class), any(Principal[].class))).thenReturn(delegateAliases);
X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
- assertSame("Different object returned", aliases, wrapper.getServerAliases("", new Principal[0]));
+ assertArrayEquals("Expected array containing only the wrapper alias", new String[] { wrapperAlias }, wrapper.getServerAliases("", new Principal[0]));
}
@Test
@@ -116,4 +105,28 @@ public class X509AliasKeyManagerTest {
assertSame("Different object returned", mockKey, wrapper.getPrivateKey(wrapperAlias));
}
+
+ @Test
+ public void testChooseEngineClientAliasReturnsGivenAlias() {
+ String wrapperAlias = "wrapperAlias";
+ String myDelegateAlias = "delegateAlias";
+ X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
+ when(mock.chooseEngineClientAlias(any(String[].class), any(Principal[].class), any(SSLEngine.class))).thenReturn(myDelegateAlias);
+
+ X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
+
+ assertEquals("Expected wrapper alias", wrapperAlias, wrapper.chooseEngineClientAlias(new String[0], new Principal[0], mock(SSLEngine.class)));
+ }
+
+ @Test
+ public void testChooseEngineServerAliasReturnsGivenAlias() {
+ String wrapperAlias = "wrapperAlias";
+ String myDelegateAlias = "delegateAlias";
+ X509ExtendedKeyManager mock = mock(X509ExtendedKeyManager.class);
+ when(mock.chooseEngineServerAlias(any(String.class), any(Principal[].class), any(SSLEngine.class))).thenReturn(myDelegateAlias);
+
+ X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
+
+ assertEquals("Expected wrapper alias", wrapperAlias, wrapper.chooseEngineServerAlias("", new Principal[0], mock(SSLEngine.class)));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org