我有一个问题,让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下载的脚本,我确定经纪人没有任何问题。
任何帮助都会得到满足。
答案 0 :(得分:0)
要安装的 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
)。