Kafka SSL握手报错:Empty client certificate chain 求助
Kafka SSL双向认证报错:Empty client certificate chain 解决方法
问题场景
作为Kafka新手搭建SSL环境,通过脚本生成信任库/密钥库并转换为PKCS12格式后,执行以下命令时出现javax.net.ssl.SSLHandshakeException: Empty client certificate chain错误:
kafka-topics.sh --bootstrap-server "kafka:9092" --command-config=kafka-ssl.properties --list
客户端配置文件kafka-ssl.properties内容:
security.protocol=SSL ssl.truststore.type=PKCS12 ssl.truststore.location=kafka.keystore.p12 ssl.truststore.password=a1234141aadfafwg enable.ssl.certificate.verification=false ssl.endpoint.identification.algorithm=
客户端日志关键信息:
javax.net.ssl|ALL|E0|kafka-admin-client-thread | adminclient-1|2023-10-17 13:20:45.906 EEST|X509Authentication.java:249|No X.509 cert selected for EC ... javax.net.ssl|WARNING|E0|kafka-admin-client-thread | adminclient-1|2023-10-17 13:20:45.945 EEST|CertificateMessage.java:1094|No available authentication scheme
服务端日志关键信息:
[2023-10-17 13:20:45,993] DEBUG [SslTransportLayer ...] SSL Handshake failed javax.net.ssl.SSLHandshakeException: Empty client certificate chain ... [2023-10-17 13:20:46,012] INFO [SocketServer ...] Failed authentication with /192.168.4.121 (SSL handshake failed)
问题原因
服务端开启了双向SSL认证(要求客户端提供自身证书),但当前客户端配置仅指定了信任库(用于验证服务端证书),未配置密钥库(用于向服务端提供客户端证书及私钥),导致握手时无法发送客户端证书链。
解决步骤
确认服务端SSL配置
检查Kafka服务端的server.properties,确认ssl.client.auth配置值为required或requested,这意味着服务端需要客户端提供证书。补充客户端密钥库配置
在kafka-ssl.properties中添加以下keystore相关配置(PKCS12格式文件通常同时包含密钥和信任证书,直接复用已有的kafka.keystore.p12即可):# 添加客户端密钥库配置 ssl.keystore.type=PKCS12 ssl.keystore.location=kafka.keystore.p12 ssl.keystore.password=a1234141aadfafwg # 如果密钥的密码与keystore密码不同,需要追加以下配置 # ssl.key.password=your-key-password验证PKCS12文件有效性
执行以下命令检查PKCS12文件是否包含客户端私钥和证书:keytool -list -v -storetype PKCS12 -keystore kafka.keystore.p12输出中需包含
PrivateKeyEntry(客户端私钥)和trustedCertEntry(信任的CA/服务端证书)。重新执行命令
确保配置文件路径正确、文件权限可读取,再次运行kafka-topics.sh命令即可完成SSL握手。
内容的提问来源于stack exchange,提问作者ilias-sp
相关产品推荐
相关产品推荐

