Настройка работы сервисов Оркестратора с RabbitMQ через SSL
Last updated
Was this helpful?
Last updated
Was this helpful?
Данная статья содержит следующие подразделы:
Заведение OpenSSL сертификатов для работы через SSL.
Настройка RabbitMQ на Linux для работы через SSL.
Настройка RabbitMQ на Windows для работы через SSL.
Настройка сервисов оркестратора для работы с RabbitMQ через SSL.
Полезные ссылки.
Устанавливаем OpenSSL либо с официального сайта, либо используем ту версию, что идет в составе одной из утилит (например, можно использовать ту, которая идет в составе git).
Для того, чтобы в скриптах каждый раз не использовать полный путь к файлу openssl.exe, рекомендуется добавить этот путь в настройки системной переменной Path (если же вы предпочитаете работать через PowerShell, а не через командную строку, и не желаете изменять системную переменную Path, то можно использовать сеансовые алиасы).
Далее в данном руководстве предполагается, что полный путь прописан в системной переменной Path.
Прописать путь в Path, если вы работаете в Windows, можно таким образом: Открываем указанное ниже диалоговое окно (и далее выбираем соответствующие вкладки / нажимаем указанные кнопки / выбираем указанные строки из списков):
В нерусифицированной версии Windows:
System Properties > Advanced > Environment Variables… > System variables > Path > Edit… > New > [Тут указываем полный путь к файлу openssl.exe]:
В русской версии Windows:
Свойства системы > Дополнительно > Переменные среды… > Системные переменные > Path > Изменить… > Создать > [Тут указываем полный путь к файлу openssl.exe]:
Далее создаем каталог, в котором будут размещаться как сами сертификаты, так и необходимые для их создания файлы и переходим в него.
RabbitMQ должен при запуске иметь доступ к корневому сертификату СА, сертификату сервера и приватному ключу сертификата сервера. Создадим эти файлы.
Первым делом создаем корневой ключ CA и затем создаем корневой сертификат CA. Для этого открываем командную строку и выполняем в ней такие 2 команды:
Заполняем необходимые поля для сертификата. Имена выбираем произвольно. На этом корневой сертификат CA создан.
Генерируем ключ для сервера:
Теперь создаем запрос на сертификат сервера.
При заполнении полей, в поле Common Name важно указать имя сервера: домен или IP адрес сервера (например домен: db.example.com
или IP-адрес: 192.168.0.116
): 10. Генерируем самоподписанный x509-сертификат сервера используя запрос на сертификат сервера, сертификат СА и ключ сертификата СА:
Теперь таким же образом (как описано в трех предыдущих пунктах) создаем связку ключ-сертификат для клиента. Имена файлов соответственно меняем (например: RMQ-client-key.pem
, RMQ-client-signingrequest.csr
, RMQ-client-cert.pem
):
При заполнении полей сертификата клиента, в поле Common Name указываем логин под которым будет выполняться подключение к RabbitMQ (по умолчанию для сервисов Оркестратора это имя: admin
– далее во всех скриптах в этом руководстве подразумевается, что было задано именно такое имя для этого параметра). 12. Для работы с RabbitMQ клиентам требуется специальный тип сертификата PKCS12, создаем его такой командой:
При этом запоминаем (записываем) парольную фразу, требуемую для данного типа сертификатов. Она нам пригодится в дальнейшем при конфигурировании работы сервисов Оркестратора.
В итоге в нашей рабочей папке должно быть 10 таких файлов:
Теперь переходим к настройке RabbitMQ и сервисов оркестратора для работы через SSL, как описано далее в настоящем руководстве
Копируем корневой сертификат CA, ключ и сертификат сервера (созданные ранее в п.1. настоящего руководства) в удобный для вас каталог (допустим, он расположен по такому пути: /etc/pki/tls
).
В итоге в этом каталоге должны быть установлены указанные выше файлы с такими правами:
Теперь переходим к правке файла конфигурации RabbitMQ. Он должен быть собран с поддержкой SSL/TLS. Этот файл может по разному именоваться и может иметь разное расширение.
Расположение всех конфигурационых файлов можно найти запустив в командной строке команду:
Конфигурационные файлы будут перечислены в секции Config files:
Расположение конфигурационных файлов также можно найти, если кликнуть по кнопке с названием текущего узла в RabbitMQ management UI (в примере, показанном на картинке, следует кликнуть по кнопке с наименованием rabbit@astra-linux):
Если конфигурационный файл имеет расширение *.config, то изменяем его в соответствии с описанием по настройке SSL в RabbitMQ для операционной системы Windows данного руководства.
Если этот файл имеет расширение *.conf, то для работы RabbitMQ через SSL/TLS вносим в него такие строки, подставив актуальные пути к сертификатам и ключу:
Если нам необходимо, чтобы RabbitMQ работал исключительно только через SSL/TLS, то следует внести в конфигурационный файл такие строки:
В нашем случае эта секция конфигурационного файла выглядит таким образом:
Следующий шаг: необходимо активировать встроенный в RabbitMQ плагин для аутентификации через SSL. Сделать это можно, выполнив в командной строке такую команду:
После этого необходимо перезагрузить сервис RabbitMQ. Сделать это можно, выполнив в командной строке такие 2 команды:
Теперь проверяем, что мы все сделали правильно, и сервис RabbitMQ может работать через SSL/TLS. Запускаем RabbitMQ management UI и проверяем, что запущен SSL-порт 5671
Затем, кликнув по кнопке с названием текущего узла, проверяем, что запущен плагин для работы через SSL и включен механизм аутентификации EXTERNAL:
Копируем корневой сертификат CA, ключ и сертификат сервера (созданные ранее в п.1. настоящего руководства) в удобный для Вас каталог (допустим он расположен по такому пути: C:/tmp/certs
).
В итоге в этом каталоге должны быть установлены указанные выше файлы:
Теперь переходим к правке файла конфигурации RabbitMQ. Он должен быть собран с поддержкой SSL/TLS. Этот файл может по разному именоваться и может иметь разное расширение.
Расположение всех конфигурационых файлов можно найти, запустив в командной строке команду:
Конфигурационные файлы будут перечислены в секции Config files:
Расположение конфигурационных файлов также можно найти, если кликнуть по кнопке с названием текущего узла в RabbitMQ management UI (в примере, показанном на картинке, следует кликнуть по кнопке с наименованием rabbit@Victor-PC):
Если конфигурационный файл имеет расширение *.conf, то изменяем его в соответствии с описанием по настройке SSL в RabbitMQ для операционной системы Linux данного руководства.
Если этот файл имеет расширение *.config, то для работы RabbitMQ через SSL/TLS вносим в него такие строки, подставив актуальные пути к сертификатам и ключу:
Если нам необходимо, чтобы RabbitMQ работал исключительно только через SSL/TLS, то следует внести в конфиг такие строки:
Следующий шаг: необходимо активировать встроенный в RabbitMQ плагин для аутентификации через SSL. Сделать это можно, выполнив в командной такую команду:
После этого необходимо перезагрузить сервис RabbitMQ. Сделать это можно, выполнив в командной строке с правами администратора такие 2 команды:
Теперь проверяем, что мы все сделали правильно, и сервис RabbitMQ может работать через SSL/TLS. Запускаем RabbitMQ management UI и проверяем, что запущен SSL-порт 5671:
Затем, кликнув по кнопке с названием текущего узла, проверяем, что запущен плагин для работы через SSL и включен механизм аутентификации EXTERNAL:
Копируем специальный тип сертификата PKCS12 (созданный ранее в п.1. настоящего руководства) в удобный для вас каталог на машине, где развернут требуемый сервис Оркестратора.
Далее меняем конфигурационный файл сервиса (файл appsettings.ProdWin.json для машин семейства Windows, или appsettings.ProdLinux.json для машин семейства Linux). Для этого изменяем секцию RabbitMQ конфигурационного файла таким образом:
Для параметра Port
указываем значение 5671
.
Для параметра UseSsl
указываем значение true
.
Для параметра SslServerName
указываем имя сервера, которое было указано в сертификате сервера для RabbitMQ (см. п.1. данного руководства).
Для параметра SslCertPath
указываем полный путь и имя клиентского сертификата PKCS12.
Для параметра SslCertPassphrase
указываем парольную фразу, которую мы задали для сертификата PKCS12, когда его создавали (см. п.1. данного руководства).
Например, для машин с ОС Windows эти секции конфигурационнго файла могут выглядеть так:
Эти же секции конфигурационного файла для машин с ОС Linux могут выглядеть так:
Перед тем как запустить сервис Оркестратора, рекомендуется выставить в конфигурационном файле этого сервиса уровень логирования в Information, это поможет быстрее разобраться с возможными проблемами при его некорректном запуске. Например, как показано в данном случае:
Если все сконфигурировано корректно, то после запуска сервиса в его логах отобразится запись, что коннект с RabbitMQ установлен:
При этом в RabbitMQ management UI на вкладке Connections можно будет увидеть вновь созданный коннект:
И если кликнуть по названию этого коннекта, то можно получить его детальные характеристики:
Если же в конфигурационном файле сервиса что-то не устроит RabbitMQ, то в логах будет отображена детальная информация о том, что конкретно не так, как требуется.
Например, вот что будет в логах, если в конфигурационном файле указан сертификат, подписанный каким-либо другим центром сертификации:
Или вот что будет в логах, если в конфигурационном файле указана некорректная парольная фраза для сертификата:
Если возникли совсем непонятные проблемы с SSL-сертификатом, то также будет полезно посмотреть логи самого RabbitMQ. Расположение этих логов можно узнать из RabbitMQ management UI кликнув по названию текущего узла:
Сайт OpenSSL
Документация по сетевым настройкам RabbitMQ (включая SSL/TLS, на английском языке)
Документация по настройкам TLS в RabbitMQ (на английском языке)
Описание кодов ошибок при работе с SSL/TLS (на английском языке)
Описание параметров rabbitmq.conf (на английском языке)
Описание механизма аутентификации с использованием x509 (TLS/SSL) сертификатов для RabbitMQ (на английском языке)
Реализация аутентификации RabbitMQ с использованием SSL/TLS по стандарту .NET Standard 2.1 (на английском языке)