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

Kafka与SpringBoot消费者SSL握手失败问题求助

问题排查:Kafka SSL握手失败(Unrecognized SSL message, plaintext connection?)

针对你遇到的SSL握手错误,以下是几个关键排查方向:

1. 验证Broker的9093端口是否确实提供SSL服务

首先确认Broker的9093端口正在处理SSL流量,而非明文请求:

openssl s_client -connect 192.168.xx.xx:9093
  • 如果返回SSL握手成功的信息(包含证书详情、会话信息),说明Broker端口配置正常;
  • 如果连接后直接收到非SSL数据,或者提示“plaintext connection”,说明Broker的9093端口被错误配置为PLAINTEXT,需要重新检查server.properties中的listeners配置,确保SSL://0.0.0.0:9093没有被覆盖或写错。

2. 检查消费者SSL配置的细节

端点标识验证

如果Broker证书的CN名称和你连接的IP不一致,会导致端点验证失败,进而触发类似错误。可以临时关闭验证(测试环境用,生产不建议):

spring.kafka.ssl.endpoint-identification-algorithm=

密钥库类型配置

如果你的密钥库/信任库是PKCS12格式而非默认的JKS,必须显式指定类型:

spring.kafka.ssl.key-store-type=PKCS12
spring.kafka.ssl.trust-store-type=PKCS12

3. 确认密钥库/信任库的完整性

服务器端密钥库检查

kafka.server.keystore.jks必须包含服务器私钥和对应的证书链,而不只是证书。用以下命令检查:

keytool -list -v -keystore /home/kafka/kafka/ssl/kafka.server.keystore.jks

输出中必须存在PrivateKeyEntry类型的条目,否则Broker无法完成SSL握手。

客户端密钥库检查

同理,kafka.client.keystore.jks也需要包含客户端私钥,用相同命令检查是否有PrivateKeyEntry。

证书一致性

确认所有信任库中的root.crt是签署server/client证书的同一CA根证书,且证书未过期:

keytool -printcert -file root.crt

查看Valid from和Valid until字段确认有效期。

4. 补充Broker的SSL协议/套件配置

如果消费者和Broker的SSL协议版本不兼容,也会导致握手失败。在server.properties中添加明确的协议和套件配置:

ssl.enabled.protocols=TLSv1.2,TLSv1.3
ssl.cipher.suites=ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305

消费者端同步配置:

spring.kafka.ssl.enabled-protocols=TLSv1.2,TLSv1.3

5. 排查网络层面的干扰

确认9093端口没有被防火墙、代理或负载均衡器修改为明文流量。可以在Broker所在机器上用tcpdump抓包,查看收到的第一个数据包是否为SSL Client Hello:

tcpdump -i any port 9093 -A | head -20

如果看到明文内容而非SSL握手的二进制数据,说明网络中间设备存在问题。


内容的提问来源于stack exchange,提问作者Samuel Waithaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:35:18