rest - 无法为 Kafka Connect REST API 配置 SSL

标签 rest ssl apache-kafka apache-kafka-connect

我正在尝试为 Kafka Connect REST API (2.11-2.1.0) 配置 SSL。

问题

我尝试了两种配置(worker config):

  • 带有 listeners.https. 前缀
listeners=https://localhost:9000
listeners.https.ssl.keystore.location=/mypath/keystore.jks
listeners.https.ssl.keystore.password=mypassword
listeners.https.ssl.key.password=mypassword
  • 并且没有 listeners.https. 前缀
listeners=https://localhost:9000
ssl.keystore.location=/mypath/keystore.jks
ssl.keystore.password=mypassword
ssl.key.password=mypassword

两种配置都启动正常,并在尝试连接到 https://localhost:9000 时显示以下异常:

javax.net.ssl.SSLHandshakeException: no cipher suites in common

在日志中,我看到 SslContextFactory 是使用任何 keystore 创建的,但使用了密码:

210824 ssl.SslContextFactory:350 DEBUG: Selected Protocols [TLSv1.2, TLSv1.1, TLSv1] of [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]
210824 ssl.SslContextFactory:351 DEBUG: Selected Ciphers   [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, ...]
210824 component.AbstractLifeCycle:177 DEBUG: STARTED @10431ms SslContextFactory@42f8285e[provider=null,keyStore=null,trustStore=null]

我做了什么

因为我知道来自 keystore 的密码是绝对正确的,所以我深入研究了源代码,并开始调试。

最后,我发现无论是普通的 ssl.* 还是带前缀的 listeners.https.ssl.* 配置都没有被考虑在内,结果是有目前无法为 Kafka Connect REST API 配置 SSL。

调用顺序是:

  1. > RestServer.createConnector
  2. > SSLUtils.createSslContextFactory
  3. > AbstractConfig.valuesWithPrefixAllOrNothing

最后一个方法是麻烦的原因。

如果我们有 listeners.https. 属性,则无法返回它们,因为它们在第 254 行被过滤掉了(因为 WorkerConfig 不包含带有前缀的属性)。

否则,如果我们有不带前缀的 ssl. 属性,它们也不会返回,因为 values 字段仅包含来自同一 WorkerConfig 的已知属性(valuesConfigDef.parse 的结果)。

我是否遗漏了什么,有没有人为 kafka connect rest api 成功配置 SSL?

最佳答案

尝试导出 KAFKA_OPTS=-Djava.security.auth.login.config=/apps/kafka/conf/kafka/kf_jaas.conf 其中 kf_jaas.conf 包含 ZooKeeper客户端认证

关于rest - 无法为 Kafka Connect REST API 配置 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220602/

相关文章:

apache-kafka - 我们如何将相同键的所有值合并为一个列表,并返回键和值为字符串的 Kafka Streams

jquery - 跨域 jQuery Ajax 请求和 WCF REST 服务

rest - NextJS13 API 请求正文在 API 处理程序中为空

javascript - 使用 Ember js 调用 REST API

ssl - 如何通过端口 8443 上的 https 运行 tomcat7 网络应用程序?

java - 使用自签名证书的 Android SSLSockets

java - 如何从Spring Boot调用Python程序?

使用模拟器在代号一中使用 SSL 证书

java - 为kafka主题配置ACL

java - Kafka 到 S3 - 如何将切片从 kafka 加载到 S3