Подключение к Kafka с помощью SslStream

#c# #ssl #apache-kafka

#c# #ssl #apache-kafka

Вопрос:

Я пытаюсь подключиться к Kafka с помощью SslStream.
Код C #, который я пытаюсь, является:

  using (var client = tcpClientBuilder.CreateTcpClient())
 {
     if(!client.Connected)
          client.Connect("xx.x.xxx.xx", 9093);
     using (var stream = client.GetStream())
    {
      using (var ssl = new SslStream(stream, false, ValidateCertificate))
      {                 
         ssl.AuthenticateAsClient("xx.x.xxx.xx", _certificateCollection, 
                                SslProtocols.Tls, false);
  }
  

Файл сертификата, который я использую, является файлом PEM, а библиотека C #, которую я использую, являетсяhttps://github.com/Jroland/kafka-net

Исключение, которое я получаю при обратном вызове validateCrtificate, является:

Не удается прочитать данные из транспортного соединения: попытка подключения завершилась неудачей, поскольку подключенная сторона не ответила должным образом через определенный промежуток времени, или сбой установленного соединения произошел из-за того, что подключенный хост не смог ответить.

Сервер kafka работает нормально и может подключаться к нему с помощью Java. Я не могу найти ничего неправильного в файлах журнала (прилагается). Код для ValidateCertificate является:

  private bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            if (sslPolicyErrors.ToString() != "None")
            {
                return true;
            }
            return false;
        }
  

У меня также есть метод рукопожатия SSLSream, вызываемый перед отправкой любого сообщения в kafka. Это выполняется без каких-либо ошибок.

 private void HandShake(X509Certificate2Collection certificateCollection, IPHostEntry entry, SslStream sslStream)
        {
            try
            {
                sslStream.AuthenticateAsClient(entry.HostName, certificateCollection, SslProtocols.Default, false);
                sslStream.Write(Encoding.ASCII.GetBytes(handshake), 0, Encoding.ASCII.GetBytes("handshake").Length);
                sslStream.Flush();
            }
            catch (AuthenticationException ae)
            {
                throw;
            }
        }
  

Если кто-нибудь может пролить свет на это, это было бы очень полезно..
Файл сертификата, который я использую, является файлом PEM, а библиотека C #, которую я использую, являетсяhttps://github.com/Jroland/kafka-net . Файлы сертификатов были экспортированы в Kafka правильно.

Ошибка, которую я получаю в ответ, является

«Не удается прочитать данные из транспортного соединения: попытка подключения завершилась неудачей, поскольку подключенная сторона не ответила должным образом через определенный промежуток времени, или установленный сбой соединения, поскольку подключенный хост не смог ответить».

Сервер kafka запущен, и я не могу найти ничего неправильного в файлах журнала.

Примечание: Я могу подключиться к Kafka с помощью JRoland SDK ([https://github.com/Jroland/kafka-net ][1])

Версия Kafka: Kafka_2.11-0.10.0.0 Если кто-нибудь может пролить свет на это, это было бы очень полезно..

Спасибо,

Комментарии:

1. Я не думаю, что эта библиотека поддерживается. Я бы предложил использовать Confluent

2. Это желательно в идеале, но у меня есть много существующих клиентов, которые используют JRoland SDK, и для них переход на Confluent не является вариантом.