Подключение к RabbitMQ по протоколу SSL с использованием .NET

#c# #.net #ssl #rabbitmq

#c# #.net #ssl #rabbitmq

Вопрос:

Я пытаюсь использовать SSL для подключения к RabbitMQ из .СЕТЕВОЕ приложение.

RabbitMQ 3.8.8, Erlang 22.2, ОС Windows

RabbitMQ.Client.Исключения.Исключение BrokerUnreachableException: "Ни одна из указанных конечных точек не была доступна"
Внутреннее исключение:
 Исключение IOException: не найден совместимый механизм аутентификации - сервер предлагается []

расширенный.config

 [
    {ssl, [{versions, ["tlsv1.2", "tlsv1.1"]}]},
    {rabbit, [
        {auth_backends, [rabbit_auth_backend_ldap]},
        {auth_mechanisms, ["PLAIN", "AMQPLAIN", "EXTERNAL"]},
        {ssl_listeners, [5671]},
        {ssl_options, [
            {cacertfile,"C:\Program Files\RabbitMQ SSL\cacert.pem"},
            {certfile,"C:\Program Files\RabbitMQ SSL\cert.pem"},
            {keyfile,"C:\Program Files\RabbitMQ SSL\key.pem"},
            {verify,verify_peer},
            {fail_if_no_peer_cert,false}
        ]}
    ]},
    {rabbitmq_auth_backend_ldap, [
        {servers, ["corp.mydamain.com", "10.10.0.4", "10.10.0.6"]},
        {user_dn_pattern, "cn=${username},OU=IT,OU=USR,DC=corp,DC=mydamain,DC=com"},
        {dn_lookup_attribute, "userPrincipalName"},
        {dn_lookup_base, "DC=corp,DC=mydamain,DC=com"},
        {user_dn_pattern, "${username}@corp.mydamain.com"},
        {use_ssl, false},
        {port, 389},
        {log, true},
        {vhost_access_query, {in_group, "CN=GRP_ORG.IT,OU=ORG,OU=GRP,DC=corp,DC=mydamain,DC=com"}},
        {resource_access_query, {in_group, "CN=GRP_ORG.IT,OU=ORG,OU=GRP,DC=corp,DC=mydamain,DC=com"}},
        {tag_queries, [
            {administrator, {constant, false}},
            {management, {constant, true}}
        ]}
    ]}
].
  

Я пытаюсь удалить параметр auth_mechanisms. Затем я получаю сообщение об ошибке:

RabbitMQ.Client.Исключения.Исключение BrokerUnreachableException: "Ни одна из указанных конечных точек не была доступна"
Внутреннее исключение:
 Исключение IOException: не найден совместимый механизм аутентификации - сервер предлагается [AMQPLAIN PLAIN]

Я использую .NET RabbitMQ.Client 5.2.0

Исходный код

 var factory = new ConnectionFactory
{
    HostName = "dtc01-betst1",
    Port = AmqpTcpEndpoint.DefaultAmqpSslPort,
    VirtualHost = "/",
    AuthMechanisms = new AuthMechanismFactory[] { new ExternalMechanismFactory() }
};
factory.Ssl.ServerName = "dtc01-betst1.corp.mydamain.com";
factory.Ssl.CertPath = "cert.pem"; // the same file as in {certfile,"C:\Program Files\RabbitMQ SSL\cert.pem"} in advanced.config
factory.Ssl.CertPassphrase = "";
factory.Ssl.Enabled = true;
factory.Ssl.Version = SslProtocols.Tls12;

using (var con = factory.CreateConnection())
using (var channel = con.CreateModel())
{
    ...
}
  

Ответ №1:

В файле конфигурации следует использовать косые черты.

Поскольку вы пытаетесь использовать аутентификацию по сертификату X509, вы должны быть уверены, что rabbitmq-auth-mechanism-ssl плагин включен:

 rabbitmq-plugins.bat enable rabbitmq_auth_mechanism_ssl
  

Если это не решит вашу проблему, я настоятельно рекомендую обратиться за помощью в rabbitmq-users список рассылки.


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает rabbitmq-users список рассылки и только иногда отвечает на вопросы по StackOverflow.