From 8d65032fd500c018202178abd7f1aec46248070d Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Mon, 16 Mar 2015 20:54:27 +0200 Subject: [PATCH] AMQP-484: Selectable SSL Algo JIRA: https://jira.spring.io/browse/AMQP-484 (must remain at SSLv3 when backporting to 1.4.x) Also add overridable method for additional context customization. AMQP-484: Javadoc Polishing Change `TLSv1.1` to the `SSLv3` by default --- .../RabbitConnectionFactoryBean.java | 76 ++++++++++++++++--- .../rabbit/connection/SSLConnectionTests.java | 47 ++++++++++++ .../src/test/resources/ssl.properties | 4 + 3 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 spring-rabbit/src/test/java/org/springframework/amqp/rabbit/connection/SSLConnectionTests.java create mode 100644 spring-rabbit/src/test/resources/ssl.properties diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/RabbitConnectionFactoryBean.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/RabbitConnectionFactoryBean.java index 1f38c203..a13dd35d 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/RabbitConnectionFactoryBean.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/RabbitConnectionFactoryBean.java @@ -31,22 +31,30 @@ import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.ExceptionHandler; -import com.rabbitmq.client.SaslConfig; -import com.rabbitmq.client.SocketConfigurator; - import org.springframework.beans.factory.config.AbstractFactoryBean; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.ExceptionHandler; +import com.rabbitmq.client.SaslConfig; +import com.rabbitmq.client.SocketConfigurator; + /** * Factory bean to create a RabbitMQ ConnectionFactory, delegating most * setter methods and optionally enabling SSL, with or without - * certificate validation. + * certificate validation. When {@link #setSslPropertiesLocation(Resource) sslPropertiesLocation} + * is not null, the default implementation loads a {@code PKCS12} keystore and a + * {@code JKS} truststore using the supplied properties and intializes {@code SunX509} key + * and trust manager factories. These are then used to initialize an {@link SSLContext} + * using the {@link #setSslAlgorithm(String) sslAlgorithm} (default TLSv1.1). + *

+ * Override {@link #createSSLContext()} to create and/or perform further modification of the context. + *

+ * Override {@link #setUpSSL()} to take complete control over setting up SSL. * * @author Gary Russell * @@ -54,12 +62,14 @@ import org.springframework.util.StringUtils; */ public class RabbitConnectionFactoryBean extends AbstractFactoryBean { - private final ConnectionFactory connectionFactory = new ConnectionFactory(); + protected final ConnectionFactory connectionFactory = new ConnectionFactory(); private boolean useSSL; private Resource sslPropertiesLocation; + private volatile String sslAlgorithm = "SSLv3"; + /** * Whether or not the factory should be configured to use SSL. * @param useSSL true to use SSL. @@ -68,6 +78,30 @@ public class RabbitConnectionFactoryBean extends AbstractFactoryBean