我正在尝试设置kafka群集并向其添加ssl,但总是遇到相同的错误:
INFO [SocketServer brokerId=0] Failed authentication with /XXX.XXX.XXX.XXX (SSL handshake failed) (org.apache.kafka.common.network.Selector)
我读了好几篇关于这个问题的文章,但是我不能解决它。
我在ubuntu18.04和openjdk 14上使用kafka 2.5.0,并使用let's encrypt为我的域名生成证书(与nginx完美配合)。
首先,我使用以下命令创建了一个pkcs12文件:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name kafka1 -CAfile chain.pem -caname root
…然后我创建了密钥库(使用kafka文档中描述的-ext选项):
keytool -importkeystore -deststorepass 'STRONG_PASS' -destkeypass 'STRONG_PASS' -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass 'STRONG_PASS' -alias kafka1 -ext SAN=DNS:{FQDN}
…我还将证书添加到信任库:
keytool -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt -importcert -file /etc/letsencrypt/live/YOURDOMAIN/chain.pem
至此,我相信我已经完成了正确配置密钥库和信任库的所有必要步骤。
我的代理配置是:
broker.id=0
listeners=SSL://mydomain.com:9092
ssl.keystore.location=/path/to/keystore.jks
ssl.keystore.password=password
ssl.key.password=password
ssl.truststore.location=/path/to/jdk/lib/security/cacerts
ssl.truststore.password=changeit
ssl.secure.random.implementation=SHA1PRNG
security.inter.broker.protocol=SSL
ssl.endpoint.identification.algorithm= # I tried with and without this and the problem persists
advertised.listeners=SSL://mydomain.com:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/path/to/kafka_data
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.num.partitions=3
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
min.insync.replicas=2
default.replication.factor=2
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=IP1:2181,IP2:2181,IP3:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=3000
然后运行代理并尝试执行以下命令,以了解是否一切正常:
openssl s_client -debug -connect mydomain.com:9092 -tls1 | head -n 50
并显示错误:
INFO [SocketServer brokerId=0] Failed authentication with /XXX.XXX.XXX.XXX (SSL handshake failed) (org.apache.kafka.common.network.Selector)
我的域名和我的主机名不一样,我不知道这是否是个问题。我只想给第一个代理添加安全性,然后在其他两个代理中重复相同的操作,但是首先让第一个代理工作。
我的配置有什么问题?也许是信托商店?或者主机名和域名?
暂无答案!
目前还没有任何答案,快来回答吧!