You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka启用SSL认证时出现SSL握手失败问题求助

Kafka SSL握手失败问题排查与解决

问题概述

明文连接Kafka正常,但启用SSL认证后出现握手失败,错误日志显示客户端尝试连接localhost:9093时认证失败。

核心原因分析

从错误日志和配置来看,主要存在以下关键问题:

  1. Broker对外声明地址与客户端连接地址不匹配:Broker配置的SSL对外地址是localhost:9093,但客户端初始连接用的是容器名kafka:9093。客户端获取到Broker的对外地址后会自动切换到localhost:9093,而容器内部的localhost指向当前容器(而非Kafka Broker容器),导致连接失败。
  2. 证书SAN(主题备选名称)缺失:如果证书中未包含kafka和localhost这两个主机名,即便关闭了主机名验证,也可能因证书身份不匹配触发握手失败。
  3. 客户端证书未被Broker信任:Broker设置了KAFKA_SSL_CLIENT_AUTH: 'required',需要验证客户端身份,但Broker的truststore可能未导入客户端证书。

解决方案

1. 修正Broker对外声明地址配置

修改docker-compose.yml中的KAFKA_ADVERTISED_LISTENERS,同时包含容器内部可访问的kafka:9093和外部可访问的localhost:9093:

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,SSL://kafka:9093,SSL://localhost:9093

这样容器内的客户端会获取到正确的kafka:9093地址,外部客户端则使用localhost:9093,避免地址切换错误。

2. 生成包含正确SAN的证书

重新生成证书时,将kafka和localhost添加到SAN中,确保无论用哪个地址连接,证书都能通过身份验证:

keytool -genkey -alias kafka -keyalg RSA -keystore kafka.keystore.jks -validity 3650 \
-storepass testtest -keypass testtest \
-dname "CN=kafka,OU=dev,O=company,L=city,S=state,C=CN" \
-ext SAN=DNS:kafka,DNS:localhost,IP:127.0.0.1

3. 配置双向证书信任

由于Broker启用了客户端认证,需要完成双向证书导入:

  • 导出Broker证书并导入客户端truststore:
keytool -export -alias kafka -keystore kafka.keystore.jks -file kafka.crt -storepass testtest
keytool -import -alias kafka -file kafka.crt -keystore kafka.truststore.jks -storepass testtest -noprompt
  • 若客户端使用独立证书,导出客户端证书并导入Broker的truststore:
# 假设客户端证书存储在client.keystore.jks中
keytool -export -alias client -keystore client.keystore.jks -file client.crt -storepass testtest
keytool -import -alias client -file client.crt -keystore kafka.truststore.jks -storepass testtest -noprompt

如果客户端与Broker共用同一个keystore,可跳过此步骤。

4. 验证凭证文件正确性

确保Kafka容器内的ssl.creds文件密码与客户端配置一致,文件格式如下(每行对应一个密码):

testtest
testtest
testtest

依次对应keystore密码、key密码、truststore密码。

5. 重启服务并测试

修改配置后,重启Kafka容器:

docker-compose down && docker-compose up -d

重新运行生产者命令测试:

kafka-console-producer.sh --broker-list kafka:9093 --topic test --producer.config /etc/kafka/secrets/client-ssl-host.properties

内容的提问来源于stack exchange,提问作者Aswathy Ashok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:07:12