【问题标题】:RabbitMQ User Authentication with dynamic users使用动态用户进行 RabbitMQ 用户身份验证
【发布时间】:2020-03-25 19:41:37
【问题描述】:

我正在使用带有 SSL/TLS 的 RabbitMQ,以实现机密性、完整性和身份验证。发送的消息在发送者和代理之间使用发送者和代理证书进行加密,然后在代理和接收者之间使用代理和接收者证书进行加密。

我的配置文件如下所示:

  {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']}]}
   ]}

但这还不够,因为我需要接收者/消费者能够确保发送者/发布者的身份,如here 中所述。在接收方,我只能从代理证书访问证书信息。

解决方案是使用 user-id 消息属性,就像我在 documentation 中找到的那样。 在每条消息中发送的此属性将确保只有当 user-id 属性等于该用户用于登录 RabbitMQ 代理的用户名时,才能成功发布消息。由于我已经在使用 SSL 证书,因此我可能还会使用它们作为代理的用户身份验证,如 here 所述。

我的问题:

我正在使用 RabbitMQ 在模拟平台中的代理之间进行通信,并且代理是动态创建的,因此我需要在 RabbitMQ 上动态创建用户,这似乎是不可能的。

有人知道我能否以某种方式进行动态用户创建吗?或者建议另一种方法来解决我的身份验证问题?

谢谢

【问题讨论】:

    标签: security ssl rabbitmq


    【解决方案1】:

    用户 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(通用名称)的无密码内部用户,以便能够对其进行授权。

    如果您希望一切都自动化(应该如此),每次您想创建一个新代理时,您都必须:

    在我看来,如果您保护生成的密钥以便只有代理可以访问它们,这是一个非常安全的设置。

    【讨论】:

    • 感谢您的评论。这就是我想要做的,我应该提到它。但是,我一直在寻找一种不需要太多启动/配置时间的解决方案,特别是因为在 RabbitMQ 上使用 rabbitmqctl 创建用户有点慢。我的发帖想法是寻找另一种解决方案,考虑到那不可能。我有点担心的另一件事是我是否可以达到 RabbitMQ 与注册用户数相关的一些限制
    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 2014-02-07
    • 2014-06-11
    • 2016-04-13
    • 2013-11-02
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多