Author: rgodfrey
Date: Thu Jan 29 20:57:38 2015
New Revision: 1655858
URL: http://svn.apache.org/r1655858
Log:
[JMS AMQP 1.0 Client] Add ability to change the SSL Protocol/Provider used to
create the SSLContext
Modified:
qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionFactoryImpl.java
qpid/trunk/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/SSLUtil.java
Modified:
qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionFactoryImpl.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionFactoryImpl.java?rev=1655858&r1=1655857&r2=1655858&view=diff
==============================================================================
---
qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionFactoryImpl.java
(original)
+++
qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionFactoryImpl.java
Thu Jan 29 20:57:38 2015
@@ -67,6 +67,8 @@ public class ConnectionFactoryImpl imple
private String _trustStorePath;
private String _trustStorePassword;
private SSLContext _sslContext;
+ private String _sslProtocol;
+ private String _sslProvider;
public ConnectionFactoryImpl(final String host,
@@ -163,7 +165,9 @@ public class ConnectionFactoryImpl imple
KeyManagerFactory.getDefaultAlgorithm(),
_trustStorePath,_trustStorePassword,
KeyStore.getDefaultType(),
-
TrustManagerFactory.getDefaultAlgorithm());
+
TrustManagerFactory.getDefaultAlgorithm(),
+ _sslProtocol,
+ _sslProvider);
if(username == null && _keyStoreCertAlias != null)
{
X509Certificate[] certs =
SSLUtil.getClientCertificates(_keyStoreCertAlias,
@@ -220,6 +224,16 @@ public class ConnectionFactoryImpl imple
_keyStorePassword = keyStorePassword;
}
+ public void setSslProtocol(final String sslProtocol)
+ {
+ _sslProtocol = sslProtocol;
+ }
+
+ public void setSslProvider(final String sslProvider)
+ {
+ _sslProvider = sslProvider;
+ }
+
public void setKeyStoreCertAlias(final String keyStoreCertAlias)
{
_keyStoreCertAlias = keyStoreCertAlias;
@@ -252,6 +266,8 @@ public class ConnectionFactoryImpl imple
public String keyStorePath;
public String keyStorePassword;
public String keyStoreCertAlias;
+ public String sslProvider;
+ public String sslProtocol;
}
@@ -388,7 +404,22 @@ public class ConnectionFactoryImpl imple
{
options.keyStoreCertAlias = value;
}
+ },
+ new OptionSetter("ssl-provider","")
+ {
+ public void setOption(final ConnectionOptions options, final
String value) throws MalformedURLException
+ {
+ options.sslProvider = value;
+ }
+ },
+ new OptionSetter("ssl-protocol","")
+ {
+ public void setOption(final ConnectionOptions options, final
String value) throws MalformedURLException
+ {
+ options.sslProtocol = value;
+ }
}
+
};
public static ConnectionFactoryImpl createFromURL(final String urlString)
throws MalformedURLException
@@ -496,6 +527,14 @@ public class ConnectionFactoryImpl imple
{
connectionFactory.setTrustStorePassword(options.trustStorePassword);
}
+ if (options.sslProvider != null)
+ {
+ connectionFactory.setSslProvider(options.sslProvider);
+ }
+ if (options.sslProtocol != null)
+ {
+ connectionFactory.setSslProtocol(options.sslProtocol);
+ }
return connectionFactory;
Modified:
qpid/trunk/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/SSLUtil.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/SSLUtil.java?rev=1655858&r1=1655857&r2=1655858&view=diff
==============================================================================
---
qpid/trunk/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/SSLUtil.java
(original)
+++
qpid/trunk/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/SSLUtil.java
Thu Jan 29 20:57:38 2015
@@ -27,12 +27,15 @@ import java.io.InputStream;
import java.net.Socket;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.logging.Logger;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
@@ -48,6 +51,10 @@ public class SSLUtil
public static final String TRANSPORT_LAYER_SECURITY_CODE = "TLS";
public static final String SSLV3_PROTOCOL = "SSLv3";
+
+ private static final Logger LOGGER =
Logger.getLogger(SSLUtil.class.getName());
+
+
public static SSLContext buildSslContext(final String certAlias,
final String keyStorePath,
final String keyStoreType,
@@ -56,11 +63,13 @@ public class SSLUtil
final String trustStorePath,
final String trustStorePassword,
final String trustStoreType,
- final String
trustManagerFactoryAlgorithm) throws GeneralSecurityException, IOException
+ final String
trustManagerFactoryAlgorithm,
+ final String sslProtocol,
+ final String sslProvider) throws
GeneralSecurityException, IOException
{
- final SSLContext sslContext = SSLContext
- .getInstance(TRANSPORT_LAYER_SECURITY_CODE);
+
+ SSLContext sslContext = getSslContext(sslProtocol, sslProvider);
final TrustManager[] trustManagers;
final KeyManager[] keyManagers;
@@ -109,6 +118,48 @@ public class SSLUtil
return sslContext;
}
+ private static SSLContext getSslContext(final String sslProtocol, final
String sslProvider) throws NoSuchAlgorithmException
+ {
+
+ final String sslProviderName = System.getProperty("qpid.ssl.provider",
sslProvider);
+ final String sslProtocolName = System.getProperty("qpid.ssl.protocol",
sslProtocol);
+
+ SSLContext sslContext = null;
+ if(sslProviderName != null && sslProtocolName != null)
+ {
+ try
+ {
+ sslContext = SSLContext.getInstance(sslProtocolName,
sslProviderName);
+ }
+ catch(NoSuchProviderException e)
+ {
+ LOGGER.info("Unknown SSL Context Provider '"+ sslProviderName
+ "' will use the default");
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ LOGGER.info("Unknown SSL protocol '" + sslProtocolName
+ + "' when using the provider '" + sslProviderName
+ "' will use the default provider");
+ }
+ }
+ if(sslContext == null && sslProtocolName != null)
+ {
+ try
+ {
+ sslContext = SSLContext.getInstance(sslProtocolName);
+ }
+ catch(NoSuchAlgorithmException e)
+ {
+ LOGGER.info("Unknown SSL protocol '" + sslProtocolName +
+ "' will use '"+TRANSPORT_LAYER_SECURITY_CODE+"'");
+ }
+ }
+ if(sslContext == null)
+ {
+ sslContext = SSLContext.getInstance(TRANSPORT_LAYER_SECURITY_CODE);
+ }
+ return sslContext;
+ }
+
public static X509Certificate[] getClientCertificates(final String alias,
final String keyStorePath,
final String keyStorePassword,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]