Skip to Content
Primo RPA OrchestratorСистемным администраторамНастройка работы сервисов Оркестратора с RabbitMQ через SSL

Настройка работы сервисов Оркестратора с RabbitMQ через SSL

Данная статья содержит следующие подразделы:

  1. Заведение OpenSSL сертификатов для работы через SSL.
  2. Настройка RabbitMQ на Linux для работы через SSL.
  3. Настройка RabbitMQ на Windows для работы через SSL.
  4. Настройка сервисов оркестратора для работы с RabbitMQ через SSL.
  5. Полезные ссылки.

Заведение OpenSSL сертификатов для работы через SSL

  1. Устанавливаем OpenSSL либо с официального сайта, либо используем ту версию, что идет в составе одной из утилит (например, можно использовать ту, которая идет в составе git).
  2. Для того, чтобы в скриптах каждый раз не использовать полный путь к файлу openssl.exe, рекомендуется добавить этот путь в настройки системной переменной Path (если же вы предпочитаете работать через PowerShell, а не через командную строку, и не желаете изменять системную переменную Path, то можно использовать сеансовые алиасы).
  3. Далее в данном руководстве предполагается, что полный путь прописан в системной переменной Path.
  4. Прописать путь в Path, если вы работаете в Windows, можно таким образом: Открываем указанное ниже диалоговое окно (и далее выбираем соответствующие вкладки / нажимаем указанные кнопки / выбираем указанные строки из списков):
  • В нерусифицированной версии Windows:
    System Properties > Advanced > Environment Variables… > System variables > Path > Edit… > New > [Тут указываем полный путь к файлу openssl.exe]:
  • В русской версии Windows:
    Свойства системы > Дополнительно > Переменные среды… > Системные переменные > Path > Изменить… > Создать > [Тут указываем полный путь к файлу openssl.exe]:

alt

alt

alt

  1. Далее создаем каталог, в котором будут размещаться как сами сертификаты, так и необходимые для их создания файлы, и переходим в него.
  2. RabbitMQ должен при запуске иметь доступ к корневому сертификату СА, сертификату сервера и приватному ключу сертификата сервера. Создадим эти файлы.
  3. Первым делом создаем корневой ключ CA и затем создаем корневой сертификат CA.
    Для этого открываем командную строку и выполняем в ней такие 2 команды:
openssl genrsa -out RMQ-CA-Key.pem openssl req -new -key RMQ-CA-Key.pem -x509 -days 10000 -out RMQ-CA-cert.pem

Заполняем необходимые поля для сертификата. Имена выбираем произвольно. На этом корневой сертификат CA создан.

  1. Генерируем ключ для сервера:
openssl genrsa -out RMQ-server-key.pem 2048
  1. Теперь создаем запрос на сертификат сервера.
openssl req -new -key RMQ-server-key.pem -out RMQ-signingrequest.csr

При заполнении полей, в поле Common Name важно указать имя сервера: домен или IP адрес сервера (например, домен: db.example.com или IP-адрес: 192.168.0.116): 10. Генерируем самоподписанный x509-сертификат сервера используя запрос на сертификат сервера, сертификат СА и ключ сертификата СА:

openssl x509 -req -days 1000 -in RMQ-signingrequest.csr -CA RMQ-CA-cert.pem -CAkey RMQ-CA-Key.pem -CAcreateserial -out RMQ-server-cert.pem
  1. Теперь таким же образом (как описано в трех предыдущих пунктах) создаем связку ключ-сертификат для клиента. Имена файлов соответствующим образом меняем (например: RMQ-client-key.pem, RMQ-client-signingrequest.csr, RMQ-client-cert.pem):
openssl genrsa -out RMQ-client-key.pem 2048 openssl req -new -sha256 -key RMQ-client-key.pem -out RMQ-client-signingrequest.csr openssl x509 -req -days 1000 -in RMQ-client-signingrequest.csr -CA RMQ-CA-cert.pem -CAkey RMQ-CA-Key.pem -CAcreateserial -out RMQ-client-cert.pem

При заполнении полей сертификата клиента, в поле Common Name указываем логин, под которым будет выполняться подключение к RabbitMQ (по умолчанию для сервисов Оркестратора это имя: admin – далее во всех скриптах в этом руководстве подразумевается, что было задано именно такое имя для этого параметра).
12. Для работы с RabbitMQ клиентам требуется специальный тип сертификата PKCS12, создаем его такой командой:

openssl pkcs12 -export -out client-identity.p12 -inkey RMQ-client-key.pem -in RMQ-client-cert.pem
  1. При этом запоминаем (записываем) парольную фразу, требуемую для данного типа сертификатов. Она нам пригодится в дальнейшем при конфигурировании работы сервисов Оркестратора.
  2. В итоге, в нашей рабочей папке должно быть 10 таких файлов:

alt

  1. Теперь переходим к настройке RabbitMQ и сервисов Оркестратора для работы через SSL, как описано далее в настоящем руководстве

Настройка RabbitMQ на Linux для работы через SSL

  1. Копируем корневой сертификат CA, ключ и сертификат сервера (созданные ранее в п.1. настоящего руководства) в удобный для вас каталог (допустим, он расположен по такому пути: /etc/pki/tls).
  2. В итоге, в этом каталоге должны быть установлены указанные выше файлы с такими правами:

alt

  1. Теперь переходим к правке файла конфигурации RabbitMQ. Он должен быть собран с поддержкой SSL/TLS. Этот файл может по-разному именоваться и может иметь разное расширение.
  2. Расположение всех конфигурационых файлов можно найти, запустив в командной строке команду:
rabbitmq-diagnostics status

Конфигурационные файлы будут перечислены в секции Config files:

alt

  1. Расположение конфигурационных файлов также можно найти, если кликнуть по кнопке с названием текущего узла в RabbitMQ management UI (в примере, показанном на картинке, следует кликнуть по кнопке с наименованием rabbit@astra-linux):

alt

alt

  1. Если конфигурационный файл имеет расширение *.config, то изменяем его в соответствии с описанием по настройке SSL в RabbitMQ для операционной системы Windows данного руководства.
  2. Если этот файл имеет расширение *.conf, то для работы RabbitMQ через SSL/TLS вносим в него такие строки, подставив актуальные пути к сертификатам и ключу:

alt

Если нам необходимо, чтобы RabbitMQ работал исключительно только через SSL/TLS, то следует внести в конфигурационный файл такие строки:

alt

В нашем случае эта секция конфигурационного файла выглядит таким образом:

alt

  1. Следующий шаг: необходимо активировать встроенный в RabbitMQ плагин для аутентификации через SSL. Сделать это можно, выполнив в командной строке такую команду:
rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl
  1. После этого необходимо перезагрузить сервис RabbitMQ. Сделать это можно, выполнив в командной строке такие 2 команды:
rabbitmq-service stop rabbitmq-service start
  1. Теперь проверяем, что мы все сделали правильно, и сервис RabbitMQ может работать через SSL/TLS. Запускаем RabbitMQ management UI и проверяем, что запущен SSL-порт 5671

alt

Затем, кликнув по кнопке с названием текущего узла, проверяем, что запущен плагин для работы через SSL и включен механизм аутентификации EXTERNAL:

alt

alt

Настройка RabbitMQ на Windows для работы через SSL

  1. Копируем корневой сертификат CA, ключ и сертификат сервера (созданные ранее в п.1. настоящего руководства) в удобный для Вас каталог (допустим, он расположен по такому пути: C:/tmp/certs).
  2. В итоге, в этом каталоге должны быть установлены указанные выше файлы:

alt

  1. Теперь переходим к правке файла конфигурации RabbitMQ. Он должен быть собран с поддержкой SSL/TLS. Этот файл может по-разному именоваться и может иметь разное расширение.
  2. Расположение всех конфигурационых файлов можно найти, запустив в командной строке команду:
rabbitmq-diagnostics status

Конфигурационные файлы будут перечислены в секции Config files:

alt

  1. Расположение конфигурационных файлов также можно найти, если кликнуть по кнопке с названием текущего узла в RabbitMQ management UI (в примере, показанном на картинке, следует кликнуть по кнопке с наименованием rabbit@Victor-PC):

alt

alt

  1. Если конфигурационный файл имеет расширение *.conf, то изменяем его в соответствии с описанием по настройке SSL в RabbitMQ для операционной системы Linux данного руководства.
  2. Если этот файл имеет расширение *.config, то для работы RabbitMQ через SSL/TLS вносим в него такие строки, подставив актуальные пути к сертификатам и ключу:

alt

Если нам необходимо, чтобы RabbitMQ работал исключительно только через SSL/TLS, то следует внести в конфиг такие строки:

alt

  1. Следующий шаг: необходимо активировать встроенный в RabbitMQ плагин для аутентификации через SSL. Сделать это можно, выполнив в командной такую команду:
rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl
  1. После этого необходимо перезагрузить сервис RabbitMQ. Сделать это можно, выполнив в командной строке с правами администратора такие 2 команды:
rabbitmq-service stop rabbitmq-service start
  1. Теперь проверяем, что мы все сделали правильно, и сервис RabbitMQ может работать через SSL/TLS. Запускаем RabbitMQ management UI и проверяем, что запущен SSL-порт 5671:

alt

Затем, кликнув по кнопке с названием текущего узла, проверяем, что запущен плагин для работы через SSL и включен механизм аутентификации EXTERNAL:

alt

alt

Настройка сервисов Оркестратора для работы с RabbitMQ через SSL

  1. Копируем специальный тип сертификата PKCS12 (созданный ранее в п.1. настоящего руководства) в удобный для вас каталог на машине, где развернут требуемый сервис Оркестратора.
  2. Далее меняем конфигурационный файл сервиса (файл appsettings.ProdWin.json для машин семейства Windows, или appsettings.ProdLinux.json для машин семейства Linux). Для этого изменяем секцию RabbitMQ конфигурационного файла таким образом:
  • Для параметра Port указываем значение 5671.
  • Для параметра UseSsl указываем значение true.
  • Для параметра SslServerName указываем имя сервера, которое было указано в сертификате сервера для RabbitMQ (см. п.1. данного руководства).
  • Для параметра SslCertPath указываем полный путь и имя клиентского сертификата PKCS12.
  • Для параметра SslCertPassphrase указываем парольную фразу, которую мы задали для сертификата PKCS12, когда его создавали (см. п.1. данного руководства).
  1. Например, для машин с ОС Windows эти секции конфигурационнго файла могут выглядеть так:

alt

  1. Эти же секции конфигурационного файла для машин с ОС Linux могут выглядеть так:

alt

  1. Перед тем как запустить сервис Оркестратора, рекомендуется выставить в конфигурационном файле этого сервиса уровень логирования в Information, это поможет быстрее разобраться с возможными проблемами при его некорректном запуске.
    Например, как показано в данном случае:

alt

  1. Если все сконфигурировано корректно, то после запуска сервиса в его логах отобразится запись, что коннект с RabbitMQ установлен:

alt

При этом в RabbitMQ management UI на вкладке Connections можно будет увидеть вновь созданный коннект:

alt

И если кликнуть по названию этого коннекта, то можно получить его детальные характеристики:

alt

  1. Если же в конфигурационном файле сервиса что-то не устроит RabbitMQ, то в логах будет отображена детальная информация о том, что конкретно не так, как требуется.

Например, вот что будет в логах, если в конфигурационном файле указан сертификат, подписанный каким-либо другим центром сертификации:

alt

Или вот что будет в логах, если в конфигурационном файле указана некорректная парольная фраза для сертификата:

alt

  1. Если возникли совсем непонятные проблемы с SSL-сертификатом, то также будет полезно посмотреть логи самого RabbitMQ. Расположение этих логов можно узнать из RabbitMQ management UI, кликнув по названию текущего узла:

alt

Полезные ссылки

  1. Сайт OpenSSL
  2. Документация по сетевым настройкам RabbitMQ (включая SSL/TLS, на английском языке)
  3. Документация по настройкам TLS в RabbitMQ (на английском языке)
  4. Описание кодов ошибок при работе с SSL/TLS (на английском языке)
  5. Описание параметров rabbitmq.conf (на английском языке)
  6. Описание механизма аутентификации с использованием x509 (TLS/SSL) сертификатов для RabbitMQ (на английском языке)
  7. Реализация аутентификации RabbitMQ с использованием SSL/TLS по стандарту .NET Standard 2.1 (на английском языке)