Kafka2.7基于PEM配置单向SSL客户端的报错问题排查
Kafka 2.7 客户端PEM证书单向SSL配置问题
场景说明
- 配置目标:为Kafka客户端启用单向SSL认证,直接使用PEM格式证书、不依赖JKS格式文件,先通过
kafka-topics.sh --list命令验证连通性,后续将配置复用到无法使用JKS的Java客户端 - 参考规则:Kafka官方文档对
ssl.truststore.certificates参数的定义为:用于配置受信任的X.509证书,格式由ssl.truststore.type参数定义,默认值为null,配置优先级为高 - 当前Kafka版本验证:
~/kafka/bin/kafka-topics.sh --version # 输出:2.7.0 (Commit:448719dc99a19793)
已执行操作与对应报错
首次测试
执行的连通性测试命令:
~/kafka/bin/kafka-topics.sh \ --command-config /home/kafka/kafka/client_security_one_way_ssl_using_pem.properties \ --bootstrap-server MY_IP:9093 \ --list
初始配置文件client_security_one_way_ssl_using_pem.properties内容:
ssl.endpoint.identification.algorithm= security.protocol=SSL ssl.truststore.certificates=-----BEGIN CERTIFICATE----- \ < SECRET :) > \ -----END CERTIFICATE-----
执行后抛出异常:
Exception in thread "main" org.apache.kafka.common.KafkaException: Failed to create new KafkaAdminClient at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:535) at org.apache.kafka.clients.admin.Admin.create(Admin.java:65) at kafka.admin.TopicCommand$AdminClientTopicService$.createAdminClient(TopicCommand.scala:228) at kafka.admin.TopicCommand$AdminClientTopicService$.apply(TopicCommand.scala:232) at kafka.admin.TopicCommand$.main(TopicCommand.scala:59) at kafka.admin.TopicCommand.main(TopicCommand.scala) Caused by: org.apache.kafka.common.errors.InvalidConfigurationException: SSL trust store certs can be specified only for PEM, but trust store type is JKS.
第二次调整测试
在配置文件中新增ssl.truststore.type=PEM配置项后重新执行命令,输出连续警告日志:
[2021-03-10 16:18:21,343] WARN The configuration 'ssl.truststore.certificates' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [2021-03-10 16:18:21,344] WARN The configuration 'ssl.truststore.type' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [2021-03-10 16:18:21,344] WARN The configuration 'ssl.endpoint.identification.algorithm' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig)
根因分析与解决方案
- 核心异常并非Kafka 2.7不支持PEM格式信任库参数,本质是*.properties文件的行解析规则不匹配:
之前在证书值末尾使用反斜杠做换行拼接的写法,会触发properties文件的跨行拼接逻辑,导致后续几行的配置项(如security.protocol=SSL、ssl.truststore.type=PEM)全部被识别为ssl.truststore.certificates的取值内容,客户端根本读取不到合法的配置key,才会连续输出“配置不是已知参数”的警告。 - PEM证书值的两种正确配置写法(任选其一):
- 将完整的PEM证书内容去掉所有换行,压缩为单行字符串,直接赋值给
ssl.truststore.certificates - 保留PEM证书的标准换行格式,去掉反斜杠拼接写法,Kafka 2.7原生支持跨多行的配置值解析
- 配置校验清单
调整完格式后,需确认核心参数匹配PEM单向SSL的要求:
# 明确指定信任库格式为PEM,替换默认的JKS格式 ssl.truststore.type=PEM security.protocol=SSL # 测试阶段可留空关闭主机名校验,生产环境建议填写和HTTPS一致的校验规则 ssl.endpoint.identification.algorithm= ssl.truststore.certificates=此处替换为正确格式的PEM证书内容
- 类路径兼容排查
如果调整格式后依然提示参数未知,需要检查当前执行的kafka-topics.sh的类路径:确认没有混入2.7之前版本的Kafka客户端jar包——如果加载了旧版本的客户端类,就会出现“官方文档标注支持、但实际程序识别不到参数”的异常。
内容的提问来源于stack exchange,提问作者joseph
相关产品推荐
相关产品推荐

