Spring: TLS/SSL подключение к RabbitMQ
Возникла потребность подключаться из Java приложения к брокеру RabbitMQ с использованием защищенного соединения. Приложение на Spring Boot, живёт в контейнере Docker и должно слушать два узла Rabbit параллельно.
- На входе: сертификат клиентского узла – контейнер client-cert.pfx, корневой сертификат для него root-cert.crt
- Открытый серверный сертификат шлюза Rabbit: выкачивается автоматически (можно подложить вручную)
- Используемая версия java поддерживает форматы хранилищ и JKS, и PKCS12
- Требуется: создать и положить сертификаты в Key Store (сертификаты приложения “клиентские”) и Trust Store (доверенные “серверные” сертификаты). В чём разница.
Команды для создания KeyStore и TrustStore
Настройки вынесены в переменные в начале списка команд, можно заполнить значения и скопировать всё в консоль целиком.
Это создаст хранилища с сертификатами KeyStore и TrustStore: rabbit-gw-dev_key_store.p12 и rabbit-gw-dev_trust_store.jks
Копирование хранилищ в образ Docker
Хранилища лежат в репозитории, в каталоге keystore, и копируются в контейнер – также в каталог keystore, расположенный в папке приложения.
Через переменную SSL_KEYSTORE можно сослаться на каталог с хранилищами ключей, расположенный в контейнере, из настроек приложения.
Включение TLS для RabbitMQ в Spring Boot
Выдержка из application.yml с настройками, отвечающими за TLS/SSL:
Дополнительно здесь используется Spring MultiRabbit Library для одновременного подключения к нескольким узлам RabbitMQ. Чтобы вручную СontainerFactory/RabbitTemplate для слушателей не создавать/настраивать.
Ранее писал про обертку для Testcontainers, в которой тоже используется эта библиотека.
Дополнительно – в документации RabbitMQ описано TLS подключение “голого” java client из кода, без использования Spring.
Итог и дополнительные ссылки
В целом – всё оказалось несложно (когда один раз проделаешь этот путь). Основная “проблема” – правильно создать KeyStore и TrustStore с сертификатами. Ну и базово понять разницу межу типами хранилищ KeyStore / TrustStore.
Ссылки по теме (глубже в теорию):