RabbitMQ SSL 与 spring-amqp 1.4.3 的连接。

问题描述 投票:2回答:2

我正试图通过 SSL 连接到 RabbitMQ。我遵循了此处链接的 RabbitMQ SSL 文档。https:/www.rabbitmq.comssl.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来实现,还是需要使用其他版本。谢谢您能为我提供有关此问题的任何帮助。

spring-amqp
2个回答
1
投票

我已经打开了一个 JIRA问题 为此。

的同时,。RabbitConnectionFactoryBean 只是一个方便的类,使配置底层连接工厂的默认值更加 "Spring友好"。

相反,你可以在你自己的代码中执行这个初始化(也许可以使用一个叫做 @Bean 声明使用Java配置)。)


0
投票

在搜索Rabbitmq远程访问时,我发现了下面的Spring application.properties 配置设置,可以在Spring中完成RabbitMq连接的配置。希望对大家有所帮助。

https:/www.oodlestechnologies.comblogsConnect-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.comspring-remoting-amqp#2-configuration

© www.soinside.com 2019 - 2024. All rights reserved.