具有动态用户的RabbitMQ用户身份验证

问题描述 投票:0回答:1

我将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']}]}
   ]}

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

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

我的问题:

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

有人知道我是否可以进行动态用户创建吗?或建议其他方法来解决我的身份验证问题?

谢谢

security ssl rabbitmq
1个回答
0
投票

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(通用名称),以便能够对其进行授权。

如果要使所有事情自动化(应该如此),则每次要创建新代理时,都必须:

© www.soinside.com 2019 - 2024. All rights reserved.