Я пытаюсь подключиться к серверу RabbitMQ, используя TLS1.2, но я не могу этого сделать. Я подтвердил, что мои имя пользователя и пароль работают, так как я могу подключиться к веб-клиенту RabbitMQ.
using System;
using System.Net;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
namespace DigitalFulfillmentRabbitMQ
{
public class RabbitMQService
{
public IConnection GetRabbitMqConnection()
{
ConnectionFactory connectionFactory = new ConnectionFactory();
// ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
// connectionFactory.Ssl.CertificateValidationCallback = CheckValidationResult();
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
connectionFactory.HostName = ConfigurationManager.AppSettings["RabbitMQServer"].ToString();
connectionFactory.VirtualHost = ConfigurationManager.AppSettings["RabbitMQVHOST"].ToString();
connectionFactory.Port = Int32.Parse(ConfigurationManager.AppSettings["RabbitMQPort"].ToString());
connectionFactory.UserName = ConfigurationManager.AppSettings["RabbitMQAccountUserName"].ToString();
connectionFactory.Password = ConfigurationManager.AppSettings["RabbitMQAccountPassword"].ToString();
// connectionFactory.Ssl.ServerName = System.Net.Dns.GetHostName();
connectionFactory.Ssl.ServerName = ConfigurationManager.AppSettings["RabbitMQServer"].ToString();
connectionFactory.Ssl.CertPath = ConfigurationManager.AppSettings["RabbitMQSSLCertPath"].ToString();
// connectionFactory.Ssl.CertPassphrase = ConfigurationManager.AppSettings["RabbitMQSSLCertPassphrase"].ToString();
connectionFactory.Ssl.Enabled = Convert.ToBoolean(ConfigurationManager.AppSettings["RabbitMQSSLIsEnabled"].ToString());
connectionFactory.Ssl.Version = System.Security.Authentication.SslProtocols.Tls12;
return connectionFactory.CreateConnection();
}
}
}
Сертификат - это сертификат .pem, который я положил на клиента. Я использую порт 8071. Путь к сертификату имеет формат "D: \ RabbitMQ_DF_SIT_Server_certificate \ ca_certificate.pem". Я использую клиент RabbitMQ из NuGet 5.1.0
Я сомневаюсь, что мне нужен метод обратного вызова для проверки сертификата, потому что, насколько я понимаю, это одностороннее соединение. Это приложение будет только потреблять и не публиковать вообще. Что мне не хватает? Сертификат находится на клиентском сервере, но не установлен как таковой.
Выдает ошибку:
RabbitMQ.Client.Exceptions.BrokerUnreachableException: ни одна из указанных конечных точек не была достижимой ---> System.AggregateException: произошла одна или несколько ошибок. ---> System.Security.Authentication.AuthenticationException: сбой вызова SSPI, см. Внутреннее исключение. ---> System.ComponentModel.Win32Exception: клиент и сервер не могут обмениваться данными, поскольку они не имеют общего алгоритма