【问题标题】:TLS settings for Kafka Producer with PEM files带有 PEM 文件的 Kafka Producer 的 TLS 设置
【发布时间】:2021-09-28 22:28:50
【问题描述】:

有没有办法在 Kafka Producer 中使用 pem 文件配置 TLS?我正在使用Apache Kafka Stream library。 我的问题是我只有 pem 文件,特别是 cert.pem 、 privkey.pem 和 ca.pem 但是,从文档中,我可以看到 Keystore 和 Trustore 只能使用 jks 文件设置。我正在使用 Scala 语言。

【问题讨论】:

  • 您链接的页面将 ssl.truststore.type defaults 显示为 JKS;这意味着它可以设置为任何值supported by Java(可能会因您的 Java 安装或运行时配置而异)。您可以从 PEM 文件创建一个 PKCS12,其中包含适当的内容,例如您的姓名使用 openssl pkcs12 -export 表示;多个堆栈上有几十个 Q 涵盖了这一点(这并不是真正的编程或开发问题)。 ...
  • ... 或者keystore-explorer.org 可以直接将具有合适内容的 PEM 文件读入任何 Java 密钥库类型(包括 BouncyCastle 添加的那些)。

标签: scala apache-kafka tls1.2


【解决方案1】:

从 2.7.0 开始,apache kafka 支持提供 PEM 格式的证书

https://issues.apache.org/jira/browse/KAFKA-10338

对于客户你需要提供这个道具

SslConfigsSslConfigs.SSL_TRUSTSTORE_LOCATION  
/var/ssl/private/ca.pem
        

setProperty(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, "PEM");

无论如何,仅供参考,创建 JKS(Java 密钥存储)只需要执行一两个命令即可...您可能想探索一下

https://docs.confluent.io/platform/current/security/security_tutorial.html#generating-keys-certs

对于相互身份验证 mtls,您需要提供密钥库,这是您的 ca 签名的私有证书,以及作为您的 ca 包的信任库,如果您使用的是 PEM,则不需要提供密钥,因为 PEM 不受保护密码,truststore/keystore的key就是你jks文件的密码

https://docs.confluent.io/platform/current/kafka/configure-mds/mutual-tls-auth-rbac.html

【讨论】:

  • 您好,对于相互身份验证,我还需要设置“SslConfigs.SSL_KEYSTORE_LOCATION”,对吗?我的问题是如果此参数考虑由证书+私钥组成的 PEM 文件。因为我每个都有 2 个不同的 PEM 文件。
  • 更新:我尝试设置“SslConfigs.SSL_KEYSTORE_LOCATION”,提供包含证书+私钥的 PEM 文件。但是这个配置给了我一个错误“通用异常 - 无法在 KAFKA 上发布数据错误:org.apache.kafka.common.KafkaException: Failed to construction kafka producer”。
  • 如果我以这种方式设置属性: .withProperties(Map( "security.protocol" -> "SSL", "ssl.keystore.type" -> "PEM", "ssl.keystore .key”->“/run/secrets/cert/client/cliprivkey.pem”、“ssl.keystore.certificate.chain”->“/run/secrets/cert/client/clicert.pem”、“ssl.truststore .type" -> "PEM", "ssl.truststore.certificates" -> "/run/secrets/ca/default/cacertbundle.pem" ))
  • 我得到一个不同的错误:“致命(CERTIFICATE_UNKNOWN):PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”
  • 对于相互身份验证 mtls,您需要提供密钥库,这是您的 ca 签名的私有证书,以及作为您的 ca 包的信任库,如果您使用的是 PEM,则不需要提供密钥PEM 不受密码保护,信任库/密钥库的密钥是您的 jks 文件的密码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2016-01-21
  • 2019-07-18
相关资源
最近更新 更多