You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka消费者配置SASL Broker与mTLS Schema Registry遇证书错误排查

Kafka消费者安全配置排查

问题背景

我正在为Kafka消费者配置两种安全协议:Broker采用SASL_SSL保护,Schema Registry采用mTLS保护,但配置后出现证书错误无法消费消息,希望确认当前配置是否正确,以排查是否是证书本身的问题。

服务器端配置

Broker配置

listener.security.protocol.map=EXTERNAL:SASL_SSL 
kafka.rest.client.security.protocol=SASL_PLAINTEXT

Schema Registry配置

ssl.client.auth=true
ssl.enabled.protocols=TLSv1.2
ssl.key.password=${file:/mnt/sslcerts/jksPassword.txt:jksPassword}
ssl.keystore.location=/mnt/sslcerts/keystore.jks
ssl.keystore.password=${file:/mnt/sslcerts/jksPassword.txt:jksPassword}
ssl.truststore.location=/mnt/sslcerts/truststore.jks
ssl.truststore.password=${file:/mnt/sslcerts/jksPassword.txt:jksPassword}

Spring Boot消费者当前配置

props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, KafkaJsonSchemaDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaJsonSchemaDeserializer.class);

props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
props.put(SslConfigs.SSL_ENABLED_PROTOCOLS_CONFIG, "TLSv1.2");

props.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, "JKS");
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, "./certs/truststore.jks");
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, "213fsfsK");

props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "JKS");
props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, "./certs/keystore.jks");
props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, "213fsfsK")

props.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, sslEndpointIdentificationAlgorithm);

props.put(SaslConfigs.SASL_MECHANISM, saslMechanism);
props.put(SaslConfigs.SASL_JAAS_CONFIG, saslJaasConfig);
props.put(SaslConfigs.SASL_JAAS_CONFIG,
            String.format("%s required username=\"%s\" " + "password=\"%s\";", PlainLoginModule.class.getName(), sasl_ssl_username, sasl_ssl_password));
props.put("schema.registry.url", "https://schemaregistry.confluent.apps:443");

配置问题分析

  1. Schema Registry的mTLS配置缺失
    当前配置仅针对Kafka Broker设置了SSL参数,但消费者与Schema Registry的通信是独立的,需要单独配置Schema Registry客户端的mTLS参数,应添加以下配置:

    // Schema Registry mTLS配置
    props.put("schema.registry.ssl.truststore.location", "./certs/truststore.jks");
    props.put("schema.registry.ssl.truststore.password", "213fsfsK");
    props.put("schema.registry.ssl.truststore.type", "JKS");
    props.put("schema.registry.ssl.keystore.location", "./certs/keystore.jks");
    props.put("schema.registry.ssl.keystore.password", "213fsfsK");
    props.put("schema.registry.ssl.keystore.type", "JKS");
    props.put("schema.registry.ssl.enabled.protocols", "TLSv1.2");
    
  2. 重复设置SASL_JAAS_CONFIG
    代码中两次调用props.put(SaslConfigs.SASL_JAAS_CONFIG, ...),第二次会覆盖第一次的配置,属于冗余操作,建议删除其中一行(保留通过String.format生成的那行即可)。

  3. 代码语法错误
    props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, "213fsfsK")末尾缺少分号,实际运行时会导致编译错误,需补充完整。

  4. SSL_ENDPOINT_IDENTIFICATION_ALGORITHM配置验证
    确认sslEndpointIdentificationAlgorithm变量的值是否正确,对于HTTPS连接,通常应设置为HTTPS,若设置为空可能会跳过主机名验证,但生产环境不建议这么做。

证书验证建议

如果修正上述配置后仍出现证书错误,可按以下步骤排查证书问题:

  • 确认本地truststore.jks包含Schema Registry和Kafka Broker的CA证书
  • 确认keystore.jks中的客户端证书已被Schema Registry的信任库信任
  • 使用keytool命令验证证书文件的有效性:
    # 查看信任库内容
    keytool -list -v -keystore ./certs/truststore.jks
    # 查看密钥库内容
    keytool -list -v -keystore ./certs/keystore.jks
    

内容的提问来源于stack exchange,提问作者Sudip Subedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:19