Попытка подключения к 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?