#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 не является вариантом.