SSL-соединение RabbitMQ с spring-amqp 1.4.3

Я пытаюсь подключиться к RabbitMQ через SSL. Я следил за документацией 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

Однако, когда я использую приведенный выше код и конфигурацию для подключения к RabbitMQ через SSL, я получаю фатальное предупреждение: protocol_version. Когда я посмотрел на класс org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean, который Spring использует для подключения к RabbitMQ, я увидел, что протокол, похоже, жестко закодирован для SSLv3.

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

Этот код отлично работает, если я не отключу SSLv3 на RabbitMQ. Однако мне нужно подключиться к RabbitMQ, используя Tlsv1.2. Могу ли я сделать это, используя Spring amqp 1.4.3, или мне нужно использовать другую версию. Спасибо за любую помощь, которую вы можете предоставить мне с этой проблемой.


person user4641733    schedule 06.03.2015    source источник


Ответы (2)


Для этого я открыл JIRA Issue.

В то же время RabbitConnectionFactoryBean — это просто удобный класс, позволяющий настроить базовую фабрику соединений более «дружественно к Spring» со значениями по умолчанию.

Вместо этого вы можете выполнить эту инициализацию в своем собственном коде (возможно, используя объявление @Bean с помощью конфигурации Java).

person Gary Russell    schedule 06.03.2015
comment
Спасибо!! Можно ли это сделать с помощью Spring-boot? В настоящее время мы не используем в нашем проекте подход с пружинной загрузкой, но если протокол можно настроить на TLSv1.2 с использованием подхода с пружинной загрузкой, мы попробуем его вместо этого. Я уже пытался программно инициализировать RabbitMQ connectionFactory и напрямую установить протокол в SSLContext. Это прекрасно работает, но мы искали более ориентированный на Spring подход. - person user4641733; 07.03.2015
comment
Нет; он также недоступен в загрузке; Я отправил запрос на включение для 1.5, и мы перенесем его обратно на 1.4.4 (с SSLv3 по умолчанию). А пока вы можете захватите мою исправленную версию и используйте ее локально (просто поместите ее в свой собственный пакет). - person Gary Russell; 07.03.2015
comment
Спасибо за вашу помощь в этом!! - person user4641733; 09.03.2015

При поиске удаленного доступа 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

person Sankara Ramasubramanian    schedule 12.06.2020