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

У меня проблема с подключением к моему брокеру rabbitmq на сервере Ubuntu 18.04 через tls. Я использую следующий код на стороне клиента.

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Net.Security;
using System.Security.Authentication;
using System.Text;

namespace firstConsumer
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() 
            { 
                HostName = "my-domain.de",
                UserName = "main",
                Password = "1234",
                Port = 5671,
                Ssl = new SslOption
                {
                    Enabled = true,
                    Version = SslProtocols.Tls12,
                    ServerName = "my-domain.de",
                    AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch |
                                            SslPolicyErrors.RemoteCertificateChainErrors |
                                            SslPolicyErrors.RemoteCertificateNotAvailable,
                    
                }
            };



            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "test-queue",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: true,
                                         arguments: null);

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body.ToArray();
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    };

                    channel.BasicConsume(queue: "test-queue",
                                         autoAck: true,
                                         consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
        }
    }
}

Это один из примеров кодов из документации rabbitmq для подключения к брокеру с c# через tls.

RabbitMQ работает в контейнере docker с действующими сертификатами от Certbot (Let's Encrypt). Он также прослушивает правые порты tls:

rabbitmq_1  | 2020-08-01 16:40:42.082 [info] <0.523.0> started TCP listener on [::]:5672
rabbitmq_1  | 2020-08-01 16:40:42.147 [info] <0.540.0> started TLS (SSL) listener on [::]:5671

Это мой файл docker -compose:

version: '3'

services:
  rabbitmq:
    image: 'rabbitmq:3'
    hostname: 'rabbitmq'
    ports:
      - '4369:4369'
      - '5672:5672'
      - '5671:5671'
      - '25672:25672'
    volumes:
      - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
      - ./Cert/Cert-tls-gen/:/cert/

И вот мои настройки порта на ufw

Zu                         Aktion      Von
--                         ------      ---
OpenSSH                    ALLOW       Anywhere
5672                       ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
5671                       ALLOW       Anywhere
20,21,10000:10100/tcp      ALLOW       Anywhere
21                         DENY        Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
5672 (v6)                  ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)
5671 (v6)                  ALLOW       Anywhere (v6)
20,21,10000:10100/tcp (v6) ALLOW       Anywhere (v6)
21 (v6)                    DENY        Anywhere (v6)

Я всегда получаю следующее сообщение об ошибке, когда пытаюсь запустить код C#.

IOException: Authentication failed because the remote party has closed the transport stream.

И в журнале rabbitmq нет журналов попытки подключения через tls . Просто ничего не происходит. RabbitMQ просто не замечает никаких попыток подключения через tls.

Приведенный выше код отлично работает, когда я удаляю настройки ssl и пытаюсь подключиться через TCP на порт 5672. Без tls я также получаю журналы соединения с моим клиентом, и все работает нормально.

Мне кажется, что сервер отказывает в соединении, но я не знаю почему.

Это сервер fre sh только с nginx и этим docker контейнером.

Я также пробовал пример Java с тем же результатом для tls. Но он работает без настроек tls.

Exception in thread "main" javax.net.ssl.SSLException: Connection reset

Я был бы признателен, если бы кто-нибудь мог помочь мне с этой проблемой. Уже 3 дня пытаюсь решить.

Спасибо

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