О тестировании SSL-соединения на RabbitMQ - PullRequest
1 голос
/ 14 мая 2019

Попытка подключения к Rabbitmq: // uri: port / через порт с включенным SSL

string sslDir = System.IO.Path.GetFullPath(@"C:\temp");
        if (null == sslDir)
        {
            Console.WriteLine("SSL_CERT_DIR is not configured, skipping test");
            return;
        }
        cf.Ssl.ServerName = System.Net.Dns.GetHostName();
        cf.Ssl.CertPath = sslDir + "cert.cer";
        cf.Ssl.Enabled = true;
        try
        {
            var conn = cf.CreateConnection();
            var ch = conn.CreateModel();
            Console.WriteLine("Press key");
            Console.ReadKey();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            Console.WriteLine("Press key");
            Console.ReadKey();
            throw;
        }
        finally
        {
            Console.WriteLine("Press key");
            Console.ReadKey();
        }

Создает исключение со следующей трассировкой стека.Мы попробовали несколько конфигураций ssl для подключения.Два наиболее известных метода, описанных в

ConnectionFactory connectionFactory = new ConnectionFactory()
        {
            HostName = ConfigurationManager.AppSettings["RABBITMQ_HOST"],
            Port = Convert.ToInt32(ConfigurationManager.AppSettings["RABBITMQ_PORT"]),
            UserName = ConfigurationManager.AppSettings["RABBITMQ_USERNAME"],
            Password = ConfigurationManager.AppSettings["RABBITMQ_PASSWORD"],
            VirtualHost = "MyHostName",
SslPolicyErrors.RemoteCertificateNameMismatch |
SslPolicyErrors.RemoteCertificateChainErrors,
},

Попробовали следующий метод для настройки SSL с использованием сертификата из корневого сервера myservercert.cer, как показано ниже.

Ssl = new RabbitMQ.Client.SslOption("MYHOST", @"C:\temp\myservercert.cer", true),
AmqpUriSslProtocols = SslProtocols.Tls12,
};

и дополнительно другого конфигуратора SSL.

                Ssl = new SslOption()
            {
                Enabled = true,
                ServerName = "MyServer.com",
                AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch |
                                         SslPolicyErrors.RemoteCertificateChainErrors,
            },

Но мы получаем следующее исключение:

at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
   at RabbitMQ.Client.SslOption.get_Certs()
   at RabbitMQ.Client.SslHelper.TcpUpgrade(Stream tcpStream, SslOption sslOption)
   at RabbitMQ.Client.Impl.SocketFrameHandler..ctor(AmqpTcpEndpoint endpoint, Func`2 socketFactory, Int32 connectionTimeout, Int32 readTimeout, Int32 writeTimeout)
   at RabbitMQ.Client.ConnectionFactory.CreateFrameHandler(AmqpTcpEndpoint endpoint)
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection()

Большинство настроек конфигурации SSL позаботились о нас.Например, следующие параметры обеспечиваются для точности

  • Имя пользователя
  • Пароль
  • Номер_порта
  • Хост
  • VirtualHostName

Однако у нас нет удобных сообщений об ошибках.Требуемые точные настройки не поддаются отладке.

Точный фрагмент кода, который я использую, приведен ниже.

var cf = new ConnectionFactory()
        {
            HostName = ConfigurationManager.AppSettings["RABBITMQ_HOST"],
            Port = Convert.ToInt32(ConfigurationManager.AppSettings["RABBITMQ_PORT"]),
            UserName = ConfigurationManager.AppSettings["RABBITMQ_USERNAME"],
            Password = ConfigurationManager.AppSettings["RABBITMQ_PASSWORD"],
            VirtualHost = ConfigurationManager.AppSettings["RABBITMQ_VIRTUALHOSTNAMES"],
            RequestedHeartbeat = 300,
            AutomaticRecoveryEnabled = false
        };

Есть ли способ отладки соединений rabbitmq на powershell или shell?

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