Аутентификация пользователя RabbitMQ с использованием Dynami c пользователей - PullRequest
0 голосов
/ 25 марта 2020

Я использую RabbitMQ с SSL / TLS для обеспечения конфиденциальности, целостности и аутентификации. Отправленное сообщение шифруется с использованием сертификатов отправителя и брокера между отправителем и брокером, а затем шифруется с использованием сертификатов брокера и получателя между брокером и получателем.

Мой файл конфигурации выглядит следующим образом:

  {ssl, [{versions, ['tlsv1.2']}]},
  {rabbit, [
     {ssl_listeners, [5671]},
     {ssl_options, [{cacertfile, "...ca_certificate.pem"},
                    {certfile,   "...certificate_signed.pem"},
                    {keyfile,    "...private_key.pem"},
                    {password,  "pass"},
                    {verify,     verify_peer},
                    {fail_if_no_peer_cert, true},
                    {versions, ['tlsv1.2']}]}
   ]}

Однако этого недостаточно, потому что мне нужно, чтобы получатель / потребитель мог гарантировать идентификацию отправителя / издателя, как описано в здесь . В получателе я могу получить доступ только к информации сертификата из сертификата брокера.

Решением этого является использование user-id свойства сообщения, как я нашел в документации . Это свойство, отправляемое в каждом сообщении, гарантирует, что сообщение будет успешно опубликовано только в том случае, если свойство user-id равно имени пользователя, используемому для этого пользователя для входа в брокер RabbitMQ. Поскольку я уже использую сертификаты для SSL, я, вероятно, буду использовать их также для аутентификации пользователя в брокере, как описано здесь

Моя проблема:

Я использую RabbitMQ для связи между агентами на платформе моделирования, и агенты создаются динамически, поэтому мне потребуется динамическое c создание пользователя в RabbitMQ, которое, по-видимому, невозможно.

Кто-то знает, если Я могу как-нибудь создать Dynami c пользователя? Или предложить другой подход к моей проблеме аутентификации?

Спасибо

1 Ответ

0 голосов
/ 26 марта 2020

Свойство user-id не является функцией безопасности. Он просто устанавливает информацию в заголовке сообщения, чтобы вы могли знать, кто создал сообщение.

Если вы хотите аутентификацию и авторизацию с использованием сертификатов, вы можете следовать директивам в статье, которую вы связали (https://weblogs.asp.net/jeffreyabecker/Using-SSL-client-certificates-for-authentication-with-RabbitMQ), особенно в разделе «Настройка аутентификации клиента с помощью сертификатов».

Короче говоря, вам необходимо установить плагин rabbitmq-auth-mecanism-ssl (см. Здесь https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl/blob/master/README.md) и настроить его в соответствии с документацией. Вам также необходимо создать внутреннего пользователя без пароля в RabbitMQ, который имеет тот же CN (общее имя), что и ваш сертификат, чтобы иметь возможность давать ему полномочия.

Если вы хотите, чтобы все было автоматизировано (как и должно быть), каждый раз, когда вы хотите создать нового агента, вам необходимо:

На мой взгляд, это очень безопасная настройка, если вы защищаете сгенерированные ключи так, что только агенты имеют к ним доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...