Author: rgodfrey
Date: Wed Mar  9 16:11:56 2016
New Revision: 1734283

URL: http://svn.apache.org/viewvc?rev=1734283&view=rev
Log:
QPID-7113 : When using Java 8, if the cipher suite white list is set then set 
broker to use the cipher suite order for preference

Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnectionTLSDelegate.java
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    
qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnectionTLSDelegate.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnectionTLSDelegate.java?rev=1734283&r1=1734282&r2=1734283&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnectionTLSDelegate.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnectionTLSDelegate.java
 Wed Mar  9 16:11:56 2016
@@ -319,6 +319,10 @@ public class NonBlockingConnectionTLSDel
         sslEngine.setUseClientMode(false);
         SSLUtil.updateEnabledTlsProtocols(sslEngine, 
port.getTlsProtocolWhiteList(), port.getTlsProtocolBlackList());
         SSLUtil.updateEnabledCipherSuites(sslEngine, 
port.getTlsCipherSuiteWhiteList(), port.getTlsCipherSuiteBlackList());
+        if(port.getTlsCipherSuiteWhiteList() != null && 
!port.getTlsCipherSuiteWhiteList().isEmpty())
+        {
+            SSLUtil.useCipherOrderIfPossible(sslEngine.getSSLParameters());
+        }
 
         if(port.getNeedClientAuth())
         {

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1734283&r1=1734282&r2=1734283&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
 Wed Mar  9 16:11:56 2016
@@ -36,6 +36,9 @@ import java.util.Set;
 
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLParameters;
+import javax.net.ssl.SSLServerSocket;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 import javax.servlet.DispatcherType;
@@ -402,6 +405,22 @@ public class HttpManagement extends Abst
                                                                                
      port.getTlsCipherSuiteWhiteList(),
                                                                                
      port.getTlsCipherSuiteBlackList());
                                         }
+
+                                        @Override
+                                        public void customize(final SSLEngine 
sslEngine)
+                                        {
+                                            super.customize(sslEngine);
+                                            
useCipherOrderIfPossible(sslEngine.getSSLParameters());
+                                        }
+
+                                        private void 
useCipherOrderIfPossible(final SSLParameters sslParameters)
+                                        {
+                                            
if(port.getTlsCipherSuiteWhiteList() != null
+                                               && 
!port.getTlsCipherSuiteWhiteList().isEmpty())
+                                            {
+                                                
SSLUtil.useCipherOrderIfPossible(sslParameters);
+                                            }
+                                        }
                                     };
 
         boolean needClientCert = port.getNeedClientAuth() || 
port.getWantClientAuth();

Modified: 
qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java?rev=1734283&r1=1734282&r2=1734283&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java
 (original)
+++ 
qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java
 Wed Mar  9 16:11:56 2016
@@ -27,6 +27,8 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.math.BigInteger;
 import java.net.URL;
 import java.nio.BufferUnderflowException;
@@ -58,6 +60,7 @@ import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLParameters;
 import javax.net.ssl.SSLPeerUnverifiedException;
 import javax.net.ssl.SSLSocket;
 import javax.xml.bind.DatatypeConverter;
@@ -74,6 +77,24 @@ public class SSLUtil
     private static final Integer DNS_NAME_TYPE = 2;
     public static final String[] TLS_PROTOCOL_PREFERENCES = new 
String[]{"TLSv1.2", "TLSv1.1", "TLS", "TLSv1"};
 
+    private static final Method SSL_PARAMATERS_SET_USER_CIPHER_SUITES_ORDER;
+
+    static
+    {
+        Method method;
+        try
+        {
+            method = SSLParameters.class.getMethod("setUseCipherSuitesOrder", 
Boolean.TYPE);
+        }
+        catch (NoSuchMethodException e)
+        {
+            method = null;
+        }
+
+        SSL_PARAMATERS_SET_USER_CIPHER_SUITES_ORDER = method;
+    }
+
+
     private SSLUtil()
     {
     }
@@ -603,4 +624,19 @@ public class SSLUtil
         throw new NoSuchAlgorithmException(String.format("Could not create 
SSLContext with one of the requested protocols: %s",
                                                          
Arrays.toString(protocols)));
     }
+
+    public static void useCipherOrderIfPossible(final SSLParameters 
sslParameters)
+    {
+        if(SSL_PARAMATERS_SET_USER_CIPHER_SUITES_ORDER != null)
+        {
+            try
+            {
+                
SSL_PARAMATERS_SET_USER_CIPHER_SUITES_ORDER.invoke(sslParameters, Boolean.TRUE);
+            }
+            catch (IllegalAccessException | InvocationTargetException e)
+            {
+                LOGGER.debug("Unable to invoke 
SSLParameters.setCipherSuiteOrder", e);
+            }
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to