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