SSL confluent-kafka-dotnet librdkafka SSL

时间:2017-08-31 14:44:57

标签: .net ssl apache-kafka ssl-certificate confluent-kafka

我有一个问题,让confluent-kafka-dotnet库使用SSL。没有SSL,一切正常,我可以通过使用kafkas自己的scritps获得SSL工作。

> .\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

我在文件cert.crt中得到了ca,这就是我如何使用以下方式获得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,我可以和texteditor一起阅读。 然后我指向ssl.ca.location中的pem文件 经纪人被配置为不验证客户端,但是当我启动我的客户端生产者时,我得到以下错误日志:

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

我已经尝试了我能想到的一切,但无法让它发挥作用。因为它适用于我可以从kafka下载的脚本,我确定经纪人没有任何问题。

任何帮助都会得到满足。

1 个答案:

答案 0 :(得分:0)

使用 SSL 证书通过 Dotnet 控制台应用安全地连接到 Kafka

要安装的 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)。

查看详情:Using SSL Certificates For Kafka Dotnet Client