启用SSL后无法向Kafka 1.0生产消息的技术求助
解决Kafka SSL端口(9093)无法生产消息的问题
我之前在配置Kafka SSL的时候也踩过类似的坑,结合你的情况,咱们一步步排查:
1. 先确认客户端的SSL配置是否完整
你能通过9092端口正常生产,说明客户端基础配置没问题,但连接SSL端口时,必须额外指定SSL相关参数,很多人容易忽略这一点。你的生产者配置文件(比如producer.properties)需要包含以下关键项:
bootstrap.servers=PUBLICIP:9093 # 必须指定使用SSL协议 security.protocol=SSL # 信任库路径,里面要导入Kafka服务器的SSL证书(自签名证书必须手动导入) ssl.truststore.location=/path/to/your/client.truststore.jks ssl.truststore.password=your_truststore_password
如果你的Kafka开启了双向认证(ssl.client.auth=required),还要额外配置客户端的密钥库:
ssl.keystore.location=/path/to/your/client.keystore.jks ssl.keystore.password=your_keystore_password ssl.key.password=your_key_password
2. 检查Kafka服务器端的SSL配置是否正确
确保server.properties里的SSL配置没有遗漏:
# 你已经配置的监听和广告地址 listeners=PLAINTEXT://:9092,SSL://:9093 advertised.listeners=PLAINTEXT://PUBLICIP:9092,SSL://PUBLICIP:9093 # 服务器密钥库配置(必填) ssl.keystore.location=/path/to/server.keystore.jks ssl.keystore.password=server_keystore_pass ssl.key.password=server_key_pass # 服务器信任库配置(如果是单向认证,这里可以和密钥库复用) ssl.truststore.location=/path/to/server.truststore.jks ssl.truststore.password=server_truststore_pass # 单向认证设置为none,双向认证设为required ssl.client.auth=none
注意:如果使用自签名证书,服务器的证书CN(Common Name)必须和advertised.listeners里的PUBLICIP一致,否则客户端会因为域名不匹配拒绝连接。
3. 用工具验证SSL端口的可用性
用openssl命令测试服务器SSL端口的握手情况,能快速定位证书问题:
openssl s_client -connect PUBLICIP:9093
查看输出内容:
- 如果出现
Verify return code: 0 (ok),说明证书验证正常; - 如果出现错误(比如
Verify return code: 18 (self signed certificate)),说明客户端信任库没导入服务器证书; - 如果出现
SSL alert number 49,可能是证书CN和IP不匹配。
4. 查看Kafka服务器日志定位细节
你只提供了客户端的报错,服务器端的server.log里会有更详细的SSL握手失败原因,比如搜索日志中的SSL handshake failed或certificate关键词,能直接看到是证书问题、配置错误还是认证失败。
5. 排除网络/防火墙问题
虽然9092能通,但9093可能被防火墙拦截,先测试端口连通性:
telnet PUBLICIP 9093
如果无法连接,先开放9093端口;如果能连接,再回到SSL配置排查。
内容的提问来源于stack exchange,提问作者phaigeim
相关产品推荐
相关产品推荐

