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