Kafka Broker SSL握手失败,节点自连接认证异常如何排查修复
问题根因分析
- 核心报错
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?已经明确指向问题本质:对端向SSL监听端口发送了明文非SSL协议的请求,服务端无法解析SSL握手报文,直接抛出异常终止连接。 - 跨节点通信正常的原因:Kafka broker之间的内部通信预先配置了完整的SSL参数,所有跨节点请求都按照SSL协议封装后发送到9092端口,完全匹配服务端的SSL监听要求,因此认证、握手流程全部正常。
- 本地访问报错的原因:触发报错的请求来源为节点本机IP 1.2.3.4,发起请求的进程(常见为运维脚本、监控采集工具、Kafka自带命令行工具)未配置SSL连接参数,默认使用PLAINTEXT明文协议访问9092端口,服务端收到明文请求后无法完成SSL握手,直接触发对应报错。
修复方案
- 第一步:定位本地发起明文请求的进程
可以执行命令netstat -anp | grep <报错中的源端口号>(报错中示例源端口为46732,每次请求端口会动态变化,可实时抓取或者根据报错时间点排查),找到具体发起请求的进程。 - 第二步:调整访问配置适配SSL协议
如果是Kafka自带命令行工具,需要创建独立的SSL客户端配置文件,示例内容如下:
执行命令时增加参数security.protocol=SSL ssl.keystore.location=/some/path/to/keystore.p12 ssl.keystore.password=替换为你的密钥库密码 ssl.key.password=替换为你的密钥密码 ssl.truststore.location=/some/path/to/server.truststore.jks ssl.truststore.password=替换为你的信任库密码 ssl.keystore.type=PKCS12 ssl.truststore.type=JKS--command-config <上述配置文件路径>即可通过SSL协议正常访问Kafka集群。 - 第三步(可选):新增本地明文监听端口
如果确有需要支持本地明文访问,可以修改server.properties配置,额外增加仅监听本地的PLAINTEXT端口,调整配置如下:
调整后重启对应Kafka节点,本地工具可直接访问9093明文端口,不会再触发SSL报错,同时跨节点通信仍走SSL端口保证安全性。listeners=SSL://some_host_name.corp.com:9092,PLAINTEXT://127.0.0.1:9093 inter.broker.listener.name=SSL listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
内容的提问来源于stack exchange,提问作者radumanolescu
相关产品推荐
相关产品推荐

