如何在Golang Kafka Go中使用JKS文件

  • 本文关键字:JKS 文件 Go Golang Kafka go
  • 更新时间 :
  • 英文 :


背景

使用kafka Go 连接Golang中具有tls配置的kafka集群

遵循步骤

使用以下命令将JKS文件转换为PEM文件

$ keytool -importkeystore -srckeystore kafka.server.truststore.jks -destkeystore server.p12 -deststoretype PKCS12
$ openssl pkcs12 -in server.p12 -nokeys -out server.cer.pem
$ keytool -importkeystore -srckeystore kafka.server.keystore.jks -destkeystore client.p12 -deststoretype PKCS12
$ openssl pkcs12 -in client.p12 -nokeys -out client.cer.pem
$ openssl pkcs12 -in client.p12 -nodes -nocerts -out client.key.pem

代码

getKafkaReader(topic string) *kafka.Reader {
kafka.NewReader(kafka.ReaderConfig{
Brokers:    brokers,
GroupID:    id,
Topic:       topic,
Dialer:      getDialer(),
})
}
return consumer
}
func getDialer() *kafka.Dialer {
dialer := &kafka.Dialer{
Timeout:   5 * time.Second,
DualStack: true,
TLS:       tlsConfig(),
}
return dialer
}
func tlsConfig() *tls.Config {
// Keystore
keys, _ := ioutil.ReadFile(kafkaConfig.KeyStoreLocation)
blocks, err := p12.ToPEM(keys, kafkaConfig.KeyStorePassword)
if err != nil {
log.Fatal(err.Error())
}
var pemData []byte
for test, b := range blocks {
_ = test
pemData = append(pemData, pem.EncodeToMemory(b)...)
}
cert, err := tls.X509KeyPair(pemData, pemData)
if err != nil {
log.Fatal(err.Error())
}
//Truststore
caCert, err := ioutil.ReadFile("client.key.pem")
if err != nil {
log.Fatal(err)
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
config := &tls.Config{
Certificates: []tls.Certificate{cert},
RootCAs:      caCertPool,
}
return config
}

错误pkcs12:读取P12数据时出错:asn1:结构错误:标签与不匹配

有人对如何处理这个错误有想法或建议吗?

我能够使用keystore-go读取JKS文件。它只支持JKS存储类型,这意味着不支持新的PKCS#12存储类型。你可以在这里看到我是如何实现它的。

最新更新