используйте TLS 1.2 для безопасного подключения к RabbitMQ - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь подключиться к серверу 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: клиент и сервер не могут обмениваться данными, поскольку они не имеют общего алгоритма

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