SSL confluent-kafka-dotnet librdkafka SSL

У меня проблема с работой библиотеки confluent-kafka-dotnet с SSL. Все работает нормально без SSL, и я могу заставить SSL работать, используя собственные скрипты kafkas, как показано ниже.

> .\kafka-console-producer.bat --broker-list domain.net:9094 --topic
busit-test --producer.config client-ssl.properties

Содержимое client-ssl.properties:

security.protocol=SSL
ssl.truststore.location=C:/Certificates/store.jks
ssl.truststore.password=mysecret

я получил ca в файле cert.crt, и вот как я получил store.jks, используя:

keytool -importcert -keystore store.jks -alias issuing -file cert.crt

Чтобы использовать confluent-kafka-dotnet, мне нужно настроить его в соответствии с документацией ( https://github.com/edenhill/librdkafka/wiki/Using-SSL-with-librdkafka).

metadata.broker.list=at_least_one_of_the_brokers
security.protocol=ssl

# CA certificate file for verifying the broker's certificate.
ssl.ca.location=ca-cert

# Client's certificate
ssl.certificate.location=client_?????_client.pem

# Client's key
ssl.key.location=client_?????_client.key

# Key password, if any.
ssl.key.password=abcdefgh

я преобразовываю файл cert.crt в .pem, используя:

openssl x509 -inform DER -in cert.crt -out cert.pem -text

Это дает мне действительный pem, который я могу прочитать с помощью текстового редактора. Затем я указываю на этот файл pem из ssl.ca.location. Брокеры настроены так, чтобы не проверять клиентов, но когда я запускаю производителя своего клиента, я получаю следующий журнал ошибок:

Connected to ipv4#xx.xxx.xx.xx:9094
failed: err: Local: SSL error: (errno: No error)
Broker changed state CONNECT -> DOWN

Я пробовал все, что мог придумать, но не могу заставить его работать. поскольку он работает со сценариями, которые я могу скачать с kafka, я уверен, что с брокерами все в порядке.

Любая помощь будет оценена.


person limlim    schedule 31.08.2017    source источник
comment
На какой платформе вы работаете? (windows, ubuntu, mac...) и какую версию confluent-kafka-dotnet вы используете?   -  person Treziac    schedule 01.09.2017
comment
Кроме того, вы можете установить конфигурацию debug на broker,security и опубликовать журнал?   -  person Treziac    schedule 02.09.2017
comment
Я использую Windows 7. Confluent.Kafka 0.11.0. соединение с собственными скриптами kafkas работает нормально, как я уже упоминал. я просто делаю jks из CA crt, который у меня есть, и добавляю его в хранилище доверия. вот паста логов. я удалил все реальные IP-адреса и адреса брокеров, но в остальном он просто скопирован. кажется, что он нормально подключается, а затем очень часто теряет соединение. даже когда он подключен, я не могу получить какие-либо созданные сообщения. войти сюда: pastebin.com/av3fjnH4 .   -  person limlim    schedule 04.09.2017
comment
Подключить означает подключиться - вы хотите, чтобы UP был в ваших журналах   -  person Treziac    schedule 04.09.2017
comment
Постараюсь воспроизвести его, когда у меня будет время - я не использую SSL в своем повседневном развертывании, но единственный раз, когда я это делал, у меня не было проблем.   -  person Treziac    schedule 04.09.2017
comment
librdkafka 0.11.1 исправляет некоторые проблемы со стабильностью SSL в Windows. Предлагаем вам попробовать новый релиз.   -  person Edenhill    schedule 18.10.2017
comment
Обновлен до последней версии (0.11.3), но все еще возникает та же проблема. вот вставка журнала pastebin.com/E0ySyCBi   -  person limlim    schedule 15.02.2018
comment
@limlim тебе повезло с этим?   -  person Wasp    schedule 11.07.2019


Ответы (1)


Использование SSL-сертификатов для безопасного подключения к Kafka с помощью консольного приложения Dotnet

Пакеты Nuget для установки (консоль диспетчера пакетов)

Install-Package Confluent.Kafka
Install-Package Microsoft.Extensions.Configuration.Json

appsettings.json

{
  "ApplicationName": "DotNetConsoleClientForStrimziKafka",
  "KafkaClientConfig": {
    "bootstrap.servers": "<PublicIP_of_LoadBalancer>:9094",
    "security.protocol": "SSL",
    "ssl.ca.location": "C:\\kafkacerts\\ca.crt",
    "ssl.certificate.location": "C:\\kafkacerts\\user.crt",
    "ssl.key.location": "C:\\kafkacerts\\user.key"
  }
}

Program.cs

appsettingsConfig = new ConfigurationBuilder()
  .SetBasePath(System.AppContext.BaseDirectory)
  .AddJsonFile(DefaultSettingsJsonFile, false, true)
  .Build();


var configProperties = appsettingsConfig.GetSection(configSectionName).GetChildren().ToDictionary(x => x.Key, x => x.Value);

var producerConfig = new ProducerConfig(configProperties);

using var producer = new ProducerBuilder<string, string>(producerConfig).Build();

Вам необходимо скачать и положить расшифрованные сертификаты в папку (в моем случае C:\kafkacerts).

См. подробности: Использование SSL-сертификатов для клиента Kafka Dotnet

person Hassan Tareq    schedule 10.05.2021