无法为kafka connect rest api配置ssl

vhipe2zx  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(395)

我正在尝试为kafka connect restapi(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是使用任何密钥库创建的,但是使用密码:

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.* nor前缀 listeners.https.ssl.* 配置没有被考虑在内,现在不可能为kafka connect restapi配置ssl。
调用顺序为:
restserver.createconnector
sslutils.createsslcontextfactory
abstractconfig.ValuesWithPrefixallor无
最后一种方法是故障原因。
如果我们有 listeners.https. 属性,因为它们在第254行被过滤掉(因为workerconfig不包含前缀为的属性)。
否则,如果我们没有准备好 ssl. 房产,他们也不退,因为 values 字段仅包含来自同一workerconfig的已知属性( values 是configdef.parse的结果)。
我遗漏了什么吗?有人成功地为kafka connect restapi配置了ssl吗?

kmpatx3s

kmpatx3s1#

尝试导出 KAFKA_OPTS=-Djava.security.auth.login.config=/apps/kafka/conf/kafka/kf_jaas.conf 哪里 kf_jaas.conf 包含zookeeper客户端身份验证

ndasle7k

ndasle7k2#

我没有测试connectrestapi,但是kafkatemplate使用ssl发送和接收消息。根据您的配置,我可以假设两个问题:
您没有指定信任库(用于证书链检查)
您使用了绝对路径,但spring密钥库位置解释为
相对于/webapp
我试着从示例中测试应用程序:https://memorynotfound.com/spring-kafka-and-spring-boot-configuration-example/ 以及https://gist.github.com/itzg/e3ebfd7aec220bf0522e23a65b1296c8
用springboot2.0.4.release测试,使用kafka库

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

这是我的application.properties内容:

spring.application.name=my-stream-app
spring.kafka.bootstrap-servers=localhost:9093
spring.kafka.ssl.truststore-location=kafka.server.truststore.jks
spring.kafka.ssl.truststore-password=123456 
spring.kafka.ssl.keystore-location=kafka.server.keystore.jks
spring.kafka.ssl.keystore-password=123456 
spring.kafka.ssl.key-password=123456
spring.kafka.properties.security.protocol=SSL

spring.kafka.consumer.group-id=properties test-consumer-group        
app.topic.foo=test

Kafka服务器配置片段:

listeners=SSL://localhost:9093

ssl.truststore.location=/home/legioner/kafka.server.truststore.jks
ssl.truststore.password=123456
ssl.keystore.location=/home/legioner/kafka.server.keystore.jks
ssl.keystore.password=123456
ssl.key.password=123456

相关问题