如何使用java中的“PEM”编码文件为TLS通信配置kafka

时间:2018-03-11 06:57:39

标签: java ssl apache-kafka

如何使用java客户端中的PEM编码文件配置kafka进行TLS通信。我在那里看到的所有文档都谈到了创建和使用java KeyStoretrustStore

https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.htmlhttps://www.confluent.io/blog/apache-kafka-security-authorization-authentication-encryption/https://docs.confluent.io/current/kafka/authentication_ssl.html

我有x.509编码的cert,private_key和ca文件,我如何使用它们来连接golang中的kafka(只是一个例子)是这样的

func connect(brokers []string, certs map[string][]byte) {

    certpool := x509.NewCertPool()
    certpool.AppendCertsFromPEM(certs["ca"])
    c, err := tls.X509KeyPair(certs["cert"], certs["private_key"])

    tls := tls.Config{
        RootCAs:            certpool,
        ClientAuth:         tls.NoClientCert,
        ClientCAs:          nil,
        Certificates:       []tls.Certificate{c},
    }

    config := sarama.NewConfig()
    config.Producer.Return.Successes = true
    config.Net.TLS.Enable = true
    config.Net.TLS.Config = &tls
}

我怎样才能在java中复制相同的行为,也许我在这里遗漏了一些东西,但有没有我可以参考的api /文档,它可以让我们配置PEM编码的内容而不是创建keyStore

2 个答案:

答案 0 :(得分:2)

从 2.7.0 开始,Kafka 支持 PEM 格式。

这是实现它的合并请求:https://issues.apache.org/jira/browse/KAFKA-10338

这是添加 PEM 格式的建议,该格式比他们的 docs/security.html 更好地记录了该功能: https://cwiki.apache.org/confluence/display/KAFKA/KIP-651+-+Support+PEM+format+for+SSL+certificates+and+private+key

答案 1 :(得分:1)

您不能直接使用PEM编码的秘密与Java。

使用opensslkeytool,您可以将证书导入Java客户端的JKS。

请参阅Import PEM into Java Key Store