You need to enable JavaScript to run this app. Kafka2.7基于PEM配置单向SSL客户端的报错问题排查
优惠活动
大模型
产品
解决方案
定价
更多

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证书值的两种正确配置写法(任选其一):
  1. 将完整的PEM证书内容去掉所有换行,压缩为单行字符串,直接赋值给ssl.truststore.certificates
  2. 保留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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:45:03