是否可以对 rabbitmq-management 插件使用基于证书的身份验证?

Is it possible to use certificate based authentication for the rabbitmq-management plugin?

我们正在使用 rabbitmq-management REST API 对 rabbitmq 的实体 (queues/exchanges) 进行不同的操作。 login/password 的标准身份验证工作正常,但出于某些原因,我们希望使用无密码身份验证(基于 ssl 证书)。根据文档 (https://www.rabbitmq.com/management.html) 看起来有这种可能性。

但是如果我们尝试配置插件:

advanced.config

{rabbitmq_management,
  [{listener, [{port,     15671},
               {ssl,      true},
               {ssl_opts, [{cacertfile, "c:/Services/certs/cacert.pem"},
                           {certfile,   "c:/Services/certs/cert.pem"},
                           {keyfile,    "c:/Services/certs/key.pem"}]}
              ]}
  ]
}

我们客户的 .NET 应用程序

public Foo(string url, X509Certificate clientCert)
{
    var handler = new HttpClientHandler();
    handler.ClientCertificates.Add(clientCert);

    _httpClient = new HttpClient(handler);

    var result = await _httpClient.GetAsync(uri)
 }

我们得到以下信息(Fiddler 会话):

  1. |隧道到| HTTP/1.1 200 连接已建立(发现与 SSLv3 兼容的 ClientHello 握手)
  2. |主机名 | HTTP/1.1 401 未经授权

是否可以为 rabbitmq-management 插件使用基于证书的身份验证?如果是,有人可以提供任何样品或文档 link 我们必须做什么吗?

我最近在 rabbitmq-users 邮件列表中回答了这个问题:link

简短的回答是,您可以将服务器配置为需要客户端证书并验证它是否由受信任的根证书签名,但您仍然需要提供用户名和密码 - 用户不会从证书中提取。


注意: RabbitMQ 团队监控 the rabbitmq-users mailing list 并且有时只在 Whosebug 上回答问题。