Author: kwall
Date: Tue Feb  2 15:27:49 2016
New Revision: 1728150

URL: http://svn.apache.org/viewvc?rev=1728150&view=rev
Log:
QPID-7041: [Java System Tests] Add system test for preemptive SSL client auth 
authentication against HTTP management

* Refactored RestTestHelper to be capable of using any keystore/truststore and 
specifying an cert alias

Added:
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/PreemtiveAuthRestTest.java
Removed:
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BasicAuthRestTest.java
Modified:
    
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted010MessageFactoryTest.java
    
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted091MessageFactoryTest.java
    qpid/java/trunk/common/pom.xml
    
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/SSLContextFactoryTest.java
    
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/TrustManagerTest.java
    
qpid/java/trunk/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/TestSSLConstants.java
    
qpid/java/trunk/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/client/ssl/SSLTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpAndHttpsTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsClientCertAuthTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java

Modified: 
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted010MessageFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted010MessageFactoryTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted010MessageFactoryTest.java
 (original)
+++ 
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted010MessageFactoryTest.java
 Tue Feb  2 15:27:49 2016
@@ -125,7 +125,7 @@ public class Encrypted010MessageFactoryT
             final List<MessageEncryptionHelper.KeyTransportRecipientInfo> 
recipientInfo =
                     
_encryptionHelper.getKeyTransportRecipientInfo(Collections.singletonList(((X509Certificate)
 _keyStore
                             .getCertificate(
-                                    "app1")).getSubjectX500Principal().getName(
+                                    
TestSSLConstants.CERT_ALIAS_APP1)).getSubjectX500Principal().getName(
                             X500Principal.CANONICAL)), _secretKeySpec);
 
             List<List<Object>> recipientHeader = new ArrayList<>();

Modified: 
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted091MessageFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted091MessageFactoryTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted091MessageFactoryTest.java
 (original)
+++ 
qpid/java/trunk/client/src/test/java/org/apache/qpid/client/message/Encrypted091MessageFactoryTest.java
 Tue Feb  2 15:27:49 2016
@@ -114,7 +114,7 @@ public class Encrypted091MessageFactoryT
             final List<MessageEncryptionHelper.KeyTransportRecipientInfo> 
recipientInfo =
                     
_encryptionHelper.getKeyTransportRecipientInfo(Collections.singletonList(((X509Certificate)
 _keyStore
                             .getCertificate(
-                                    "app1")).getSubjectX500Principal().getName(
+                                    
TestSSLConstants.CERT_ALIAS_APP1)).getSubjectX500Principal().getName(
                             X500Principal.CANONICAL)), _secretKeySpec);
 
             List<List<Object>> recipientHeader = new ArrayList<>();

Modified: qpid/java/trunk/common/pom.xml
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/pom.xml?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- qpid/java/trunk/common/pom.xml (original)
+++ qpid/java/trunk/common/pom.xml Tue Feb  2 15:27:49 2016
@@ -75,6 +75,12 @@
         <testResource>
             <directory>${basedir}/src/test/resources</directory>
         </testResource>
+      <testResource>
+        <directory>${basedir}/../</directory>
+        <includes>
+          <include>test-profiles/**/*.jks</include>
+        </includes>
+      </testResource>
     </testResources>
 
     <plugins>

Modified: 
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/SSLContextFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/SSLContextFactoryTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/SSLContextFactoryTest.java
 (original)
+++ 
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/SSLContextFactoryTest.java
 Tue Feb  2 15:27:49 2016
@@ -18,6 +18,7 @@
 package org.apache.qpid.ssl;
 
 import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.test.utils.TestSSLConstants;
 
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
@@ -29,15 +30,9 @@ import java.io.IOException;
 
 public class SSLContextFactoryTest extends QpidTestCase
 {
-    private static final String BROKER_KEYSTORE_PATH = TEST_RESOURCES_DIR + 
"/ssl/java_broker_keystore.jks";
-    private static final String CLIENT_KEYSTORE_PATH = TEST_RESOURCES_DIR + 
"/ssl/java_client_keystore.jks";
-    private static final String CLIENT_TRUSTSTORE_PATH = TEST_RESOURCES_DIR + 
"/ssl/java_client_truststore.jks";
-    private static final String STORE_PASSWORD = "password";
     private static final String STORE_TYPE = "JKS";
     private static final String DEFAULT_KEY_MANAGER_ALGORITHM = 
KeyManagerFactory.getDefaultAlgorithm();
     private static final String DEFAULT_TRUST_MANAGER_ALGORITHM = 
TrustManagerFactory.getDefaultAlgorithm();
-    private static final String CERT_ALIAS_APP1 = "app1";
-
 
     public void testTrustStoreDoesNotExist() throws Exception
     {
@@ -49,13 +44,13 @@ public class SSLContextFactoryTest exten
 
             trustManagers =
                     SSLContextFactory.getTrustManagers("/path/to/nothing",
-                                                       STORE_PASSWORD,
+                                                       
TestSSLConstants.TRUSTSTORE_PASSWORD,
                                                        STORE_TYPE,
                                                        
DEFAULT_TRUST_MANAGER_ALGORITHM);
 
             keyManagers =
-                    SSLContextFactory.getKeyManagers(CLIENT_KEYSTORE_PATH,
-                                                     STORE_PASSWORD,
+                    SSLContextFactory.getKeyManagers(TestSSLConstants.KEYSTORE,
+                                                     
TestSSLConstants.KEYSTORE_PASSWORD,
                                                      STORE_TYPE,
                                                      
DEFAULT_KEY_MANAGER_ALGORITHM,
                                                      null);
@@ -78,8 +73,8 @@ public class SSLContextFactoryTest exten
         final KeyManager[] keyManagers;
 
         trustManagers =
-                SSLContextFactory.getTrustManagers(CLIENT_TRUSTSTORE_PATH,
-                                                   STORE_PASSWORD,
+                SSLContextFactory.getTrustManagers(TestSSLConstants.TRUSTSTORE,
+                                                   
TestSSLConstants.TRUSTSTORE_PASSWORD,
                                                    STORE_TYPE,
                                                    
DEFAULT_TRUST_MANAGER_ALGORITHM);
 
@@ -98,14 +93,14 @@ public class SSLContextFactoryTest exten
         final KeyManager[] keyManagers;
 
         trustManagers =
-                SSLContextFactory.getTrustManagers(CLIENT_TRUSTSTORE_PATH,
-                                                   STORE_PASSWORD,
+                SSLContextFactory.getTrustManagers(TestSSLConstants.TRUSTSTORE,
+                                                   
TestSSLConstants.TRUSTSTORE_PASSWORD,
                                                    STORE_TYPE,
                                                    
DEFAULT_TRUST_MANAGER_ALGORITHM);
 
         keyManagers =
-                SSLContextFactory.getKeyManagers(CLIENT_KEYSTORE_PATH,
-                                                 STORE_PASSWORD,
+                SSLContextFactory.getKeyManagers(TestSSLConstants.KEYSTORE,
+                                                 
TestSSLConstants.KEYSTORE_PASSWORD,
                                                  STORE_TYPE,
                                                  DEFAULT_KEY_MANAGER_ALGORITHM,
                                                  null);
@@ -122,17 +117,17 @@ public class SSLContextFactoryTest exten
         final KeyManager[] keyManagers;
 
         trustManagers =
-                SSLContextFactory.getTrustManagers(CLIENT_TRUSTSTORE_PATH,
-                                                   STORE_PASSWORD,
+                SSLContextFactory.getTrustManagers(TestSSLConstants.TRUSTSTORE,
+                                                   
TestSSLConstants.TRUSTSTORE_PASSWORD,
                                                    STORE_TYPE,
                                                    
DEFAULT_TRUST_MANAGER_ALGORITHM);
 
         keyManagers =
-                SSLContextFactory.getKeyManagers(CLIENT_KEYSTORE_PATH,
-                                                 STORE_PASSWORD,
+                SSLContextFactory.getKeyManagers(TestSSLConstants.KEYSTORE,
+                                                 
TestSSLConstants.KEYSTORE_PASSWORD,
                                                  STORE_TYPE,
                                                  DEFAULT_KEY_MANAGER_ALGORITHM,
-                                                 CERT_ALIAS_APP1);
+                                                 
TestSSLConstants.CERT_ALIAS_APP1);
 
 
         SSLContext context = 
SSLContextFactory.buildClientContext(trustManagers, keyManagers);

Modified: 
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/TrustManagerTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/TrustManagerTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/TrustManagerTest.java 
(original)
+++ 
qpid/java/trunk/common/src/test/java/org/apache/qpid/ssl/TrustManagerTest.java 
Tue Feb  2 15:27:49 2016
@@ -31,27 +31,20 @@ import javax.net.ssl.TrustManagerFactory
 import javax.net.ssl.X509TrustManager;
 
 import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.test.utils.TestSSLConstants;
 import org.apache.qpid.transport.network.security.ssl.QpidMultipleTrustManager;
 import 
org.apache.qpid.transport.network.security.ssl.QpidPeersOnlyTrustManager;
 import org.apache.qpid.transport.network.security.ssl.SSLUtil;
 
 public class TrustManagerTest extends QpidTestCase
 {
-    private static final String BROKER_TRUSTSTORE_PATH = TEST_RESOURCES_DIR + 
"/ssl/java_broker_truststore.jks";
-    private static final String BROKER_PEERSTORE_PATH = TEST_RESOURCES_DIR + 
"/ssl/java_broker_peerstore.jks";
-    private static final String CLIENT_KEYSTORE_PATH = TEST_RESOURCES_DIR + 
"/ssl/java_client_keystore.jks";
-    private static final String CLIENT_UNTRUSTED_KEYSTORE_PATH = 
TEST_RESOURCES_DIR + "/ssl/java_client_untrusted_keystore.jks";
-    private static final String STORE_PASSWORD = "password";
     private static final String STORE_TYPE = "JKS";
     private static final String DEFAULT_TRUST_MANAGER_ALGORITHM = 
TrustManagerFactory.getDefaultAlgorithm();
-    private static final String CERT_ALIAS_APP1 = "app1";
-    private static final String CERT_ALIAS_APP2 = "app2";
-    private static final String CERT_ALIAS_UNTRUSTED_CLIENT = 
"untrusted_client";
 
     // retrieves the client certificate's chain from store and returns it as 
an array
     private X509Certificate[] getClientChain(final String storePath, final 
String alias) throws Exception
     {
-        final KeyStore ks = SSLUtil.getInitializedKeyStore(storePath, 
STORE_PASSWORD, STORE_TYPE);
+        final KeyStore ks = SSLUtil.getInitializedKeyStore(storePath, 
TestSSLConstants.KEYSTORE_PASSWORD, STORE_TYPE);
         final Certificate[] chain = ks.getCertificateChain(alias);
         return Arrays.copyOf(chain, chain.length, X509Certificate[].class);
     }
@@ -63,7 +56,7 @@ public class TrustManagerTest extends Qp
         while (aliases.hasMoreElements())
         {
             final String alias = aliases.nextElement();
-            if (!alias.equalsIgnoreCase(CERT_ALIAS_APP1))
+            if (!alias.equalsIgnoreCase(TestSSLConstants.CERT_ALIAS_APP1))
             {
                 fail("Broker's peer store contains other certificate than 
client's  app1 public key");
             }
@@ -77,7 +70,7 @@ public class TrustManagerTest extends Qp
     public void testQpidPeersOnlyTrustManager() throws Exception
     {
         // first let's check that peer manager loaded with the PEERstore 
succeeds
-        final KeyStore ps = 
SSLUtil.getInitializedKeyStore(BROKER_PEERSTORE_PATH, STORE_PASSWORD, 
STORE_TYPE);
+        final KeyStore ps = 
SSLUtil.getInitializedKeyStore(TestSSLConstants.BROKER_PEERSTORE, 
TestSSLConstants.BROKER_PEERSTORE_PASSWORD, STORE_TYPE);
         this.noCAinPeerStore(ps);
         final TrustManagerFactory pmf = 
TrustManagerFactory.getInstance(DEFAULT_TRUST_MANAGER_ALGORITHM);
         pmf.init(ps);
@@ -97,7 +90,7 @@ public class TrustManagerTest extends Qp
         try
         {
             // since broker's peerstore contains the client's app1 
certificate, the check should succeed
-            
peerManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP1), "RSA");
+            
peerManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE, 
TestSSLConstants.CERT_ALIAS_APP1), "RSA");
         }
         catch (CertificateException e)
         {
@@ -107,7 +100,7 @@ public class TrustManagerTest extends Qp
         try
         {
             // since broker's peerstore does not contain the client's app2 
certificate, the check should fail
-            
peerManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP2), "RSA");
+            
peerManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE, 
TestSSLConstants.CERT_ALIAS_APP2), "RSA");
             fail("Untrusted client's validation against the broker's peer 
store manager succeeded.");
         }
         catch (CertificateException e)
@@ -118,7 +111,7 @@ public class TrustManagerTest extends Qp
         // now let's check that peer manager loaded with the brokers 
TRUSTstore fails because
         // it does not have the clients certificate in it (though it does have 
a CA-cert that
         // would otherwise trust the client cert when using the regular trust 
manager).
-        final KeyStore ts = 
SSLUtil.getInitializedKeyStore(BROKER_TRUSTSTORE_PATH, STORE_PASSWORD, 
STORE_TYPE);
+        final KeyStore ts = 
SSLUtil.getInitializedKeyStore(TestSSLConstants.BROKER_TRUSTSTORE, 
TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD, STORE_TYPE);
         final TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(DEFAULT_TRUST_MANAGER_ALGORITHM);
         tmf.init(ts);
         final TrustManager[] delegateTrustManagers = tmf.getTrustManagers();
@@ -138,7 +131,7 @@ public class TrustManagerTest extends Qp
         {
             // since broker's truststore doesn't contain the client's app1 
certificate, the check should fail
             // despite the fact that the truststore does have a CA that would 
otherwise trust the cert
-            
peerManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP1), "RSA");
+            
peerManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE, 
TestSSLConstants.CERT_ALIAS_APP1), "RSA");
             fail("Client's validation against the broker's peer store manager 
didn't fail.");
         }
         catch (CertificateException e)
@@ -150,7 +143,7 @@ public class TrustManagerTest extends Qp
         {
             // since broker's truststore doesn't contain the client's app2 
certificate, the check should fail
             // despite the fact that the truststore does have a CA that would 
otherwise trust the cert
-            
peerManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP2), "RSA");
+            
peerManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE, 
TestSSLConstants.CERT_ALIAS_APP2), "RSA");
             fail("Client's validation against the broker's peer store manager 
didn't fail.");
         }
         catch (CertificateException e)
@@ -166,7 +159,7 @@ public class TrustManagerTest extends Qp
     public void testQpidMultipleTrustManagerWithRegularTrustStore() throws 
Exception
     {
         final QpidMultipleTrustManager mulTrustManager = new 
QpidMultipleTrustManager();
-        final KeyStore ts = 
SSLUtil.getInitializedKeyStore(BROKER_TRUSTSTORE_PATH, STORE_PASSWORD, 
STORE_TYPE);
+        final KeyStore ts = 
SSLUtil.getInitializedKeyStore(TestSSLConstants.BROKER_TRUSTSTORE, 
TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD, STORE_TYPE);
         final TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(DEFAULT_TRUST_MANAGER_ALGORITHM);
         tmf.init(ts);
         final TrustManager[] delegateTrustManagers = tmf.getTrustManagers();
@@ -185,7 +178,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the CA-trusted app1 cert (should succeed)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP1), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_APP1), "RSA");
         }
         catch (CertificateException ex)
         {
@@ -195,7 +189,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the CA-trusted app2 cert (should succeed)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP2), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_APP2), "RSA");
         }
         catch (CertificateException ex)
         {
@@ -205,7 +200,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the untrusted cert (should fail)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_UNTRUSTED_KEYSTORE_PATH,
 CERT_ALIAS_UNTRUSTED_CLIENT), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.UNTRUSTED_KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_UNTRUSTED_CLIENT), "RSA");
             fail("Untrusted client's validation against the broker's multi 
store manager unexpectedly passed.");
         }
         catch (CertificateException ex)
@@ -221,7 +217,7 @@ public class TrustManagerTest extends Qp
     public void testQpidMultipleTrustManagerWithPeerStore() throws Exception
     {
         final QpidMultipleTrustManager mulTrustManager = new 
QpidMultipleTrustManager();
-        final KeyStore ps = 
SSLUtil.getInitializedKeyStore(BROKER_PEERSTORE_PATH, STORE_PASSWORD, 
STORE_TYPE);
+        final KeyStore ps = 
SSLUtil.getInitializedKeyStore(TestSSLConstants.BROKER_PEERSTORE, 
TestSSLConstants.BROKER_PEERSTORE_PASSWORD, STORE_TYPE);
         final TrustManagerFactory pmf = 
TrustManagerFactory.getInstance(DEFAULT_TRUST_MANAGER_ALGORITHM);
         pmf.init(ps);
         final TrustManager[] delegatePeerManagers = pmf.getTrustManagers();
@@ -240,7 +236,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the trusted app1 cert (should succeed as the key is in 
the peerstore)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP1), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_APP1), "RSA");
         }
         catch (CertificateException ex)
         {
@@ -250,7 +247,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the untrusted app2 cert (should fail as the key is not 
in the peerstore)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP2), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_APP2), "RSA");
             fail("Untrusted client's validation against the broker's multi 
store manager unexpectedly passed.");
         }
         catch (CertificateException ex)
@@ -261,7 +259,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the untrusted cert (should fail as the key is not in the 
peerstore)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_UNTRUSTED_KEYSTORE_PATH,
 CERT_ALIAS_UNTRUSTED_CLIENT), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.UNTRUSTED_KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_UNTRUSTED_CLIENT), "RSA");
             fail("Untrusted client's validation against the broker's multi 
store manager unexpectedly passed.");
         }
         catch (CertificateException ex)
@@ -278,7 +277,7 @@ public class TrustManagerTest extends Qp
     public void testQpidMultipleTrustManagerWithTrustAndPeerStores() throws 
Exception
     {
         final QpidMultipleTrustManager mulTrustManager = new 
QpidMultipleTrustManager();
-        final KeyStore ts = 
SSLUtil.getInitializedKeyStore(BROKER_TRUSTSTORE_PATH, STORE_PASSWORD, 
STORE_TYPE);
+        final KeyStore ts = 
SSLUtil.getInitializedKeyStore(TestSSLConstants.BROKER_TRUSTSTORE, 
TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD, STORE_TYPE);
         final TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(DEFAULT_TRUST_MANAGER_ALGORITHM);
         tmf.init(ts);
         final TrustManager[] delegateTrustManagers = tmf.getTrustManagers();
@@ -294,7 +293,7 @@ public class TrustManagerTest extends Qp
         }
         assertTrue("The regular trust manager for the trust store was not 
added", trustManagerAdded);
 
-        final KeyStore ps = 
SSLUtil.getInitializedKeyStore(BROKER_PEERSTORE_PATH, STORE_PASSWORD, 
STORE_TYPE);
+        final KeyStore ps = 
SSLUtil.getInitializedKeyStore(TestSSLConstants.BROKER_PEERSTORE, 
TestSSLConstants.BROKER_PEERSTORE_PASSWORD, STORE_TYPE);
         final TrustManagerFactory pmf = 
TrustManagerFactory.getInstance(DEFAULT_TRUST_MANAGER_ALGORITHM);
         pmf.init(ps);
         final TrustManager[] delegatePeerManagers = pmf.getTrustManagers();
@@ -313,7 +312,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the CA-trusted app1 cert (should succeed)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP1), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_APP1), "RSA");
         }
         catch (CertificateException ex)
         {
@@ -323,7 +323,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the CA-trusted app2 cert (should succeed)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_KEYSTORE_PATH, 
CERT_ALIAS_APP2), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_APP2), "RSA");
         }
         catch (CertificateException ex)
         {
@@ -333,7 +334,8 @@ public class TrustManagerTest extends Qp
         try
         {
             // verify the untrusted cert (should fail)
-            
mulTrustManager.checkClientTrusted(this.getClientChain(CLIENT_UNTRUSTED_KEYSTORE_PATH,
 CERT_ALIAS_UNTRUSTED_CLIENT), "RSA");
+            
mulTrustManager.checkClientTrusted(this.getClientChain(TestSSLConstants.UNTRUSTED_KEYSTORE,
+                                                                   
TestSSLConstants.CERT_ALIAS_UNTRUSTED_CLIENT), "RSA");
             fail("Untrusted client's validation against the broker's multi 
store manager unexpectedly passed.");
         }
         catch (CertificateException ex)

Modified: 
qpid/java/trunk/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/TestSSLConstants.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/TestSSLConstants.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/TestSSLConstants.java
 (original)
+++ 
qpid/java/trunk/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/TestSSLConstants.java
 Tue Feb  2 15:27:49 2016
@@ -26,9 +26,13 @@ public interface TestSSLConstants
     String TRUSTSTORE = 
"test-profiles/test_resources/ssl/java_client_truststore.jks";
     String TRUSTSTORE_PASSWORD = "password";
 
+    String CERT_ALIAS_APP1 = "app1";
+    String CERT_ALIAS_APP2 = "app2";
+    String CERT_ALIAS_UNTRUSTED_CLIENT = "untrusted_client";
+
     String BROKER_KEYSTORE = 
"test-profiles/test_resources/ssl/java_broker_keystore.jks";
     String BROKER_KEYSTORE_PASSWORD = "password";
-    Object BROKER_KEYSTORE_ALIAS = "rootca";
+    String BROKER_KEYSTORE_ALIAS = "rootca";
 
     String BROKER_PEERSTORE = 
"test-profiles/test_resources/ssl/java_broker_peerstore.jks";
     String BROKER_PEERSTORE_PASSWORD = "password";

Modified: 
qpid/java/trunk/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java
 (original)
+++ 
qpid/java/trunk/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java
 Tue Feb  2 15:27:49 2016
@@ -18,11 +18,6 @@
  */
 package org.apache.qpid.systest.rest;
 
-import static org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE;
-import static org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE_PASSWORD;
-import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE;
-import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE_PASSWORD;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -35,14 +30,11 @@ import java.net.URL;
 import java.net.URLEncoder;
 import java.security.GeneralSecurityException;
 import java.security.KeyStore;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.KeyManager;
@@ -77,7 +69,6 @@ public class RestTestHelper
     public static final String API_BASE = "/api/latest/";
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(RestTestHelper.class);
-    private static final String CERT_ALIAS_APP1 = "app1";
 
     private int _httpPort;
 
@@ -92,6 +83,14 @@ public class RestTestHelper
     static final String[] EXPECTED_QUEUES = { "queue", "ping" };
     private final int _connectTimeout = 
Integer.getInteger("qpid.resttest_connection_timeout", 30000);
 
+    private String _truststore;
+    private String _truststorePassword;
+
+    private String _keystore;
+    private String _keystorePassword;
+
+    private String _clientAuthAlias;
+
     public RestTestHelper(int httpPort)
     {
         _httpPort = httpPort;
@@ -123,6 +122,23 @@ public class RestTestHelper
         return new URL(getManagementURL() + path);
     }
 
+    public void setKeystore(final String keystore, final String 
keystorePassword)
+    {
+        _keystore = keystore;
+        _keystorePassword = keystorePassword;
+    }
+
+    public void setTruststore(final String truststore, final String 
truststorePassword)
+    {
+        _truststore = truststore;
+        _truststorePassword = truststorePassword;
+    }
+
+    public void setClientAuthAlias(final String clientAuthAlias)
+    {
+        _clientAuthAlias = clientAuthAlias;
+    }
+
     public HttpURLConnection openManagementConnection(String path, String 
method) throws IOException
     {
         if (!path.startsWith("/"))
@@ -144,18 +160,22 @@ public class RestTestHelper
                 final KeyManager[] keyManagers;
 
                 trustManagers =
-                        SSLContextFactory.getTrustManagers(TRUSTSTORE,
-                                                           TRUSTSTORE_PASSWORD,
+                        SSLContextFactory.getTrustManagers(_truststore,
+                                                           _truststorePassword,
                                                            
KeyStore.getDefaultType(),
                                                            
TrustManagerFactory.getDefaultAlgorithm());
 
+                if (_keystore == null)
+                {
+                    throw new IllegalStateException("Cannot use SSL client 
auth without providing a keystore");
+                }
+
                 keyManagers =
-                        SSLContextFactory.getKeyManagers(KEYSTORE,
-                                                         KEYSTORE_PASSWORD,
+                        SSLContextFactory.getKeyManagers(_keystore,
+                                                         _keystorePassword,
                                                          
KeyStore.getDefaultType(),
                                                          
KeyManagerFactory.getDefaultAlgorithm(),
-                                                         CERT_ALIAS_APP1);
-
+                                                         _clientAuthAlias);
 
                 final SSLContext sslContext = 
SSLContext.getInstance(SSLUtil.getEnabledSSlProtocols()[SSLUtil.getEnabledSSlProtocols().length-1]);
 
@@ -170,7 +190,7 @@ public class RestTestHelper
                 throw new RuntimeException(e);
             }
         }
-        else if(_useSsl)
+        else if (_useSsl)
         {
             try
             {
@@ -181,8 +201,8 @@ public class RestTestHelper
                 final KeyManager[] keyManagers;
 
                 trustManagers =
-                        SSLContextFactory.getTrustManagers(TRUSTSTORE,
-                                                           TRUSTSTORE_PASSWORD,
+                        SSLContextFactory.getTrustManagers(_truststore,
+                                                           _truststorePassword,
                                                            
KeyStore.getDefaultType(),
                                                            
TrustManagerFactory.getDefaultAlgorithm());
 

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/client/ssl/SSLTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/client/ssl/SSLTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/client/ssl/SSLTest.java 
(original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/client/ssl/SSLTest.java 
Tue Feb  2 15:27:49 2016
@@ -57,14 +57,12 @@ import org.apache.qpid.server.model.Virt
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.apache.qpid.test.utils.TestBrokerConfiguration;
 import org.apache.qpid.test.utils.TestFileUtils;
+import org.apache.qpid.test.utils.TestSSLConstants;
 
 public class SSLTest extends QpidBrokerTestCase
 {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(SSLTest.class);
 
-    private static final String CERT_ALIAS_APP1 = "app1";
-    private static final String CERT_ALIAS_APP2 = "app2";
-
     @Override
     protected void setUp() throws Exception
     {
@@ -279,7 +277,7 @@ public class SSLTest extends QpidBrokerT
 
             String url = 
"amqp://guest:guest@test/?brokerlist='tcp://localhost:" +
                          getDefaultBroker().getAmqpTlsPort() +
-                         "?ssl='true'&ssl_cert_alias='" + CERT_ALIAS_APP1 + 
"''";
+                         "?ssl='true'&ssl_cert_alias='" + 
TestSSLConstants.CERT_ALIAS_APP1 + "''";
 
             AMQTestConnection_0_10 con = new AMQTestConnection_0_10(url);
             org.apache.qpid.transport.Connection transportCon = 
con.getConnection();
@@ -289,7 +287,7 @@ public class SSLTest extends QpidBrokerT
 
             url = "amqp://guest:guest@test/?brokerlist='tcp://localhost:" +
                   getDefaultBroker().getAmqpTlsPort() +
-                  "?ssl='true'&ssl_cert_alias='" + CERT_ALIAS_APP2 + "''";
+                  "?ssl='true'&ssl_cert_alias='" + 
TestSSLConstants.CERT_ALIAS_APP2 + "''";
 
             con = new AMQTestConnection_0_10(url);
             transportCon = con.getConnection();
@@ -599,7 +597,7 @@ public class SSLTest extends QpidBrokerT
         File privateKeyFile = TestFileUtils.createTempFile(this, 
".private-key.der");
         try(FileOutputStream kos = new FileOutputStream(privateKeyFile))
         {
-            Key pvt = ks.getKey(CERT_ALIAS_APP1, 
KEYSTORE_PASSWORD.toCharArray());
+            Key pvt = ks.getKey(TestSSLConstants.CERT_ALIAS_APP1, 
KEYSTORE_PASSWORD.toCharArray());
             kos.write("-----BEGIN PRIVATE KEY-----\n".getBytes());
             String base64encoded = 
DatatypeConverter.printBase64Binary(pvt.getEncoded());
             while(base64encoded.length() > 76)
@@ -618,7 +616,7 @@ public class SSLTest extends QpidBrokerT
 
         try(FileOutputStream cos = new FileOutputStream(certificateFile))
         {
-            Certificate[] chain = ks.getCertificateChain(CERT_ALIAS_APP1);
+            Certificate[] chain = 
ks.getCertificateChain(TestSSLConstants.CERT_ALIAS_APP1);
             for(Certificate pub : chain)
             {
                 cos.write("-----BEGIN CERTIFICATE-----\n".getBytes());

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationTest.java
 Tue Feb  2 15:27:49 2016
@@ -50,6 +50,7 @@ import org.apache.qpid.server.security.F
 import org.apache.qpid.systest.rest.RestTestHelper;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.apache.qpid.test.utils.TestSSLConstants;
 
 public class ExternalAuthenticationTest extends QpidBrokerTestCase
 {
@@ -158,7 +159,7 @@ public class ExternalAuthenticationTest
 
         try
         {
-            getExternalSSLConnection(false);
+            getExternalSSLConnection(false, "&ssl_cert_alias='" + 
TestSSLConstants.CERT_ALIAS_UNTRUSTED_CLIENT + "'");
             fail("Connection should not succeed");
         }
         catch (JMSException e)

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpAndHttpsTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpAndHttpsTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpAndHttpsTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpAndHttpsTest.java
 Tue Feb  2 15:27:49 2016
@@ -78,8 +78,13 @@ public class BrokerRestHttpAndHttpsTest
 
     private Collection<String> getMechanisms(final boolean useSsl) throws 
IOException
     {
-        _restTestHelper = new RestTestHelper(useSsl? 
getDefaultBroker().getHttpsPort() : getDefaultBroker().getHttpPort());
+        _restTestHelper = new RestTestHelper(useSsl ? 
getDefaultBroker().getHttpsPort() : getDefaultBroker().getHttpPort());
         _restTestHelper.setUseSsl(useSsl);
+        if (useSsl)
+        {
+            _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
+        }
+
         Map<String, Object> mechanisms = 
_restTestHelper.getJsonAsMap("/service/sasl");
         return (Collection<String>) mechanisms.get("mechanisms");
     }

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsClientCertAuthTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsClientCertAuthTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsClientCertAuthTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsClientCertAuthTest.java
 Tue Feb  2 15:27:49 2016
@@ -24,6 +24,7 @@ import static org.apache.qpid.test.utils
 import static org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE_PASSWORD;
 import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE;
 import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE_PASSWORD;
+import static org.apache.qpid.test.utils.TestSSLConstants.CERT_ALIAS_APP1;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -44,11 +45,6 @@ public class BrokerRestHttpsClientCertAu
     {
         setSystemProperty("javax.net.debug", "ssl");
         super.setUp();
-        setSystemProperty("javax.net.ssl.trustStore", TRUSTSTORE);
-        setSystemProperty("javax.net.ssl.trustStorePassword", 
TRUSTSTORE_PASSWORD);
-        setSystemProperty("javax.net.ssl.keystore", KEYSTORE);
-        setSystemProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD);
-
     }
 
     @Override
@@ -80,6 +76,10 @@ public class BrokerRestHttpsClientCertAu
     {
         _restTestHelper = new 
RestTestHelper(getDefaultBroker().getHttpsPort());
         _restTestHelper.setUseSslAuth(true);
+        _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
+        _restTestHelper.setKeystore(KEYSTORE, KEYSTORE_PASSWORD);
+        _restTestHelper.setClientAuthAlias(CERT_ALIAS_APP1);
+
         Map<String, Object> saslData = 
getRestTestHelper().getJsonAsMap("/service/sasl");
 
         Asserts.assertAttributesPresent(saslData, "user");

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
 Tue Feb  2 15:27:49 2016
@@ -44,8 +44,7 @@ public class BrokerRestHttpsTest extends
         super.setUp();
         _restTestHelper = new 
RestTestHelper(getDefaultBroker().getHttpsPort());
         _restTestHelper.setUseSsl(true);
-        setSystemProperty("javax.net.ssl.trustStore", TRUSTSTORE);
-        setSystemProperty("javax.net.ssl.trustStorePassword", 
TRUSTSTORE_PASSWORD);
+        _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
     }
 
     @Override

Added: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/PreemtiveAuthRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/PreemtiveAuthRestTest.java?rev=1728150&view=auto
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/PreemtiveAuthRestTest.java
 (added)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/PreemtiveAuthRestTest.java
 Tue Feb  2 15:27:49 2016
@@ -0,0 +1,192 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.systest.rest;
+
+import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE;
+import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE_PASSWORD;
+import static org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE;
+import static org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE_PASSWORD;
+import static org.apache.qpid.test.utils.TestSSLConstants.UNTRUSTED_KEYSTORE;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.qpid.server.management.plugin.HttpManagement;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Plugin;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Protocol;
+import org.apache.qpid.server.model.Transport;
+import 
org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManager;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.apache.qpid.test.utils.TestSSLConstants;
+
+public class PreemtiveAuthRestTest extends QpidRestTestCase
+{
+    private static final String USERNAME = "admin";
+    private static final String PASSWORD = "admin";
+
+    @Override
+    public void startDefaultBroker() throws Exception
+    {
+        //don't call super method, we will configure the broker in the test 
before doing so
+    }
+
+    @Override
+    protected void customizeConfiguration() throws Exception
+    {
+        //do nothing, we will configure this locally
+    }
+
+    private void configure(boolean useSsl, final boolean useClientAuth) throws 
Exception
+    {
+        super.customizeConfiguration();
+
+        setSystemProperty("javax.net.debug", "ssl");
+        if (useSsl)
+        {
+            Map<String, Object> portAttributes = new HashMap<>();
+            portAttributes.put(Port.PROTOCOLS, 
Collections.singleton(Protocol.HTTP));
+            portAttributes.put(Port.TRANSPORTS, 
Collections.singleton(Transport.SSL));
+            portAttributes.put(Port.KEY_STORE, 
TestBrokerConfiguration.ENTRY_NAME_SSL_KEYSTORE);
+
+            if (useClientAuth)
+            {
+                portAttributes.put(Port.TRUST_STORES, 
Collections.singleton(TestBrokerConfiguration.ENTRY_NAME_SSL_TRUSTSTORE));
+                portAttributes.put(Port.NEED_CLIENT_AUTH, "true");
+                portAttributes.put(Port.AUTHENTICATION_PROVIDER, 
EXTERNAL_AUTHENTICATION_PROVIDER);
+
+                Map<String, Object> externalProviderAttributes = new 
HashMap<>();
+                externalProviderAttributes.put(AuthenticationProvider.TYPE, 
ExternalAuthenticationManager.PROVIDER_TYPE);
+                externalProviderAttributes.put(AuthenticationProvider.NAME, 
EXTERNAL_AUTHENTICATION_PROVIDER);
+                
getDefaultBrokerConfiguration().addObjectConfiguration(AuthenticationProvider.class,
 externalProviderAttributes);
+            }
+
+            getDefaultBrokerConfiguration().setObjectAttributes(Port.class, 
TestBrokerConfiguration.ENTRY_NAME_HTTP_PORT, portAttributes);
+        }
+    }
+
+    private void verifyGetBrokerAttempt(int responseCode) throws IOException
+    {
+        assertEquals(responseCode, getRestTestHelper().submitRequest("broker", 
"GET"));
+    }
+
+    public void testBasicAuth() throws Exception
+    {
+        configure(false, false);
+        super.startDefaultBroker();
+
+        _restTestHelper.setUsernameAndPassword(USERNAME, PASSWORD);
+        verifyGetBrokerAttempt(HttpServletResponse.SC_OK);
+    }
+
+    public void testBasicAuth_WrongPassword() throws Exception
+    {
+        configure(false, false);
+        super.startDefaultBroker();
+
+        _restTestHelper.setUsernameAndPassword(USERNAME, "badpassword");
+        verifyGetBrokerAttempt(HttpServletResponse.SC_UNAUTHORIZED);
+    }
+
+    public void testBasicAuthWhenDisabled() throws Exception
+    {
+        configure(false, false);
+        getDefaultBrokerConfiguration().setObjectAttribute(Plugin.class, 
TestBrokerConfiguration.ENTRY_NAME_HTTP_MANAGEMENT, 
HttpManagement.HTTP_BASIC_AUTHENTICATION_ENABLED, false);
+        super.startDefaultBroker();
+        getRestTestHelper().setUseSsl(false);
+        // Try the attempt with authentication, it should fail because
+        // BASIC auth is disabled by default on non-secure connections.
+        getRestTestHelper().setUsernameAndPassword(USERNAME, PASSWORD);
+        verifyGetBrokerAttempt(HttpServletResponse.SC_UNAUTHORIZED);
+    }
+
+    public void testBasicAuth_Https() throws Exception
+    {
+        configure(true, false);
+        super.startDefaultBroker();
+        _restTestHelper = new 
RestTestHelper(getDefaultBroker().getHttpsPort());
+        _restTestHelper.setUseSsl(true);
+        _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
+
+        // Try the attempt with authentication, it should succeed because
+        // BASIC auth is enabled by default on secure connections.
+        _restTestHelper.setUsernameAndPassword(USERNAME, PASSWORD);
+        verifyGetBrokerAttempt(HttpServletResponse.SC_OK);
+    }
+
+    public void testBasicAuthWhenDisabled_Https() throws Exception
+    {
+        configure(true, false);
+        getDefaultBrokerConfiguration().setObjectAttribute(Plugin.class, 
TestBrokerConfiguration.ENTRY_NAME_HTTP_MANAGEMENT, 
HttpManagement.HTTPS_BASIC_AUTHENTICATION_ENABLED, false);
+        super.startDefaultBroker();
+        _restTestHelper = new 
RestTestHelper(getDefaultBroker().getHttpsPort());
+        _restTestHelper.setUseSsl(true);
+        _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
+
+        // Try the attempt with authentication, it should fail because
+        // BASIC auth is now disabled on secure connections.
+        _restTestHelper.setUsernameAndPassword(USERNAME, PASSWORD);
+        verifyGetBrokerAttempt(HttpServletResponse.SC_UNAUTHORIZED);
+    }
+
+    public void testClientCertAuth() throws Exception
+    {
+        configure(true, true);
+        super.startDefaultBroker();
+        _restTestHelper = new 
RestTestHelper(getDefaultBroker().getHttpsPort());
+        _restTestHelper.setUseSsl(true);
+        _restTestHelper.setUseSslAuth(true);
+        _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
+        _restTestHelper.setKeystore(KEYSTORE, KEYSTORE_PASSWORD);
+
+        _restTestHelper.setUsernameAndPassword(null, null);
+        verifyGetBrokerAttempt(HttpServletResponse.SC_OK);
+    }
+
+    public void testClientCertAuth_UntrustedClientCert() throws Exception
+    {
+        configure(true, true);
+        super.startDefaultBroker();
+        _restTestHelper = new 
RestTestHelper(getDefaultBroker().getHttpsPort());
+        _restTestHelper.setUseSsl(true);
+        _restTestHelper.setUseSslAuth(true);
+        _restTestHelper.setTruststore(TRUSTSTORE, TRUSTSTORE_PASSWORD);
+        _restTestHelper.setKeystore(UNTRUSTED_KEYSTORE, KEYSTORE_PASSWORD);
+        
_restTestHelper.setClientAuthAlias(TestSSLConstants.CERT_ALIAS_UNTRUSTED_CLIENT);
+
+        _restTestHelper.setUsernameAndPassword(null, null);
+
+        try
+        {
+            getRestTestHelper().submitRequest("broker", "GET");
+            fail("Exception not thrown");
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+    }
+}

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java?rev=1728150&r1=1728149&r2=1728150&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
 Tue Feb  2 15:27:49 2016
@@ -284,7 +284,7 @@ public class BrokerACLTest extends QpidR
 
         assertKeyStoreExistence(keyStoreName, false);
 
-        int responseCode = createKeyStore(keyStoreName, "app1");
+        int responseCode = createKeyStore(keyStoreName, 
TestSSLConstants.CERT_ALIAS_APP1);
         assertEquals("keyStore creation should be allowed", 201, responseCode);
 
         assertKeyStoreExistence(keyStoreName, true);
@@ -298,7 +298,7 @@ public class BrokerACLTest extends QpidR
 
         assertKeyStoreExistence(keyStoreName, false);
 
-        int responseCode = createKeyStore(keyStoreName, "app1");
+        int responseCode = createKeyStore(keyStoreName, 
TestSSLConstants.CERT_ALIAS_APP1);
         assertEquals("keyStore creation should be allowed", 403, responseCode);
 
         assertKeyStoreExistence(keyStoreName, false);
@@ -312,7 +312,7 @@ public class BrokerACLTest extends QpidR
 
         assertKeyStoreExistence(keyStoreName, false);
 
-        int responseCode = createKeyStore(keyStoreName, "app1");
+        int responseCode = createKeyStore(keyStoreName, 
TestSSLConstants.CERT_ALIAS_APP1);
         assertEquals("keyStore creation should be allowed", 201, responseCode);
 
         assertKeyStoreExistence(keyStoreName, true);
@@ -333,7 +333,7 @@ public class BrokerACLTest extends QpidR
 
         assertKeyStoreExistence(keyStoreName, false);
 
-        int responseCode = createKeyStore(keyStoreName, "app1");
+        int responseCode = createKeyStore(keyStoreName, 
TestSSLConstants.CERT_ALIAS_APP1);
         assertEquals("keyStore creation should be allowed", 201, responseCode);
 
         assertKeyStoreExistence(keyStoreName, true);
@@ -351,8 +351,8 @@ public class BrokerACLTest extends QpidR
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
         String keyStoreName = getTestName();
-        String initialCertAlias = "app1";
-        String updatedCertAlias = "app2";
+        String initialCertAlias = TestSSLConstants.CERT_ALIAS_APP1;
+        String updatedCertAlias = TestSSLConstants.CERT_ALIAS_APP2;
 
         assertKeyStoreExistence(keyStoreName, false);
 
@@ -378,8 +378,8 @@ public class BrokerACLTest extends QpidR
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
         String keyStoreName = getTestName();
-        String initialCertAlias = "app1";
-        String updatedCertAlias = "app2";
+        String initialCertAlias = TestSSLConstants.CERT_ALIAS_APP1;
+        String updatedCertAlias = TestSSLConstants.CERT_ALIAS_APP2;
 
         assertKeyStoreExistence(keyStoreName, false);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to