使用spring-amqp 1.4.3的RabbitMQ SSL连接

时间:2015-03-06 16:57:37

标签: spring-amqp

我正在尝试通过SSL连接到RabbitMQ。我已按照此处链接的RabbitMQ SSL文档https://www.rabbitmq.com/ssl.html 根据RabbitMQ SSL文档,由于已知漏洞,因此不建议使用SSLv3和TLSv1进行连接。因此我按照说明在RabbitMQ上禁用了这些协议。

我使用spring-amqp 1.4.3连接到RabbitMQ。请在下面找到代码片段

            ApplicationContext context =
            new GenericXmlApplicationContext("classpath:/testConfig/testrabbit-context.xml");
        RabbitTemplate template = context.getBean(RabbitTemplate.class);
        MessageProperties messageProperties = new MessageProperties();
        org.springframework.amqp.core.Message amqpMessage = new org.springframework.amqp.core.Message(
                "Test".getBytes(), messageProperties);
        String routingKey = "TEST.businessevent.route";
        template.send(routingKey, amqpMessage);

请在我的配置下面找到

        <rabbit:connection-factory id="rabbitConnectionFactory"
    connection-factory="clientConnectionFactory"        
    host="localhost" 
    port="5671" 
    username="username"
    password="password" 
    virtual-host="test_host" />

<rabbit:admin connection-factory="rabbitConnectionFactory" />

<rabbit:template id="rabbitTemplate"
    connection-factory="rabbitConnectionFactory" exchange="test_topic" />

<rabbit:topic-exchange name="test_topic" durable="true" />  

<bean id="clientConnectionFactory"
    class="org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean">
<property name="useSSL" value="true" />
<property name="sslPropertiesLocation" value="/testconfig/rabbitSSL.properties"/>

</bean>

属性文件rabbitSSL.properties如下

    keyStore=file:/client/keycert.p12
    trustStore=file:/lib/security/rabbitStore
    keyStore.passPhrase=testpassword
    trustStore.passPhrase=testpassword

然而,当我使用上面的代码和配置通过SSL连接到RabbitMQ时,我收到致命警报:protocol_version。 当我查看Spring用于连接RabbitMQ的org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean类时,我可以看到该协议似乎被硬编码为SSLv3。

                SSLContext context = SSLContext.getInstance("SSLv3");
        context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        this.connectionFactory.useSslProtocol(context);

如果我不在RabbitMQ上禁用SSLv3,此代码可以正常工作。但是我需要使用Tlsv1.2连接到RabbitMQ。我可以使用Spring amqp 1.4.3做到这一点,还是需要使用其他版本。感谢您的帮助,您可以向我提供此问题。

2 个答案:

答案 0 :(得分:1)

我为此打开了JIRA Issue

与此同时,RabbitConnectionFactoryBean只是一个便利类,可以使基础连接工厂的配置更加“弹性友好”,并具有默认值。

相反,您可以在自己的代码中执行此初始化(可能使用Java配置使用@Bean声明)。

答案 1 :(得分:0)

在搜索Rabbitmq远程访问时,我遇到了以下Spring application.properties配置设置,可以在Spring中进行配置以配置RabbitMq连接。希望这会有所帮助。

https://www.oodlestechnologies.com/blogs/Connect-to-SSL-enabled-RabbitMQ-server-Springboot/

    spring.rabbitmq.host=hostURL
    spring.rabbitmq.port = hostPort
    spring.rabbitmq.username = username
    spring.rabbitmq.password = password
    spring.rabbitmq.virtual-host=virtualHost
    spring.rabbitmq.ssl.enabled=true
    spring.rabbitmq.ssl.algorithm=TLSv1.2

https://www.baeldung.com/spring-remoting-amqp#2-configuration