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");
配置问题分析
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");重复设置SASL_JAAS_CONFIG
代码中两次调用props.put(SaslConfigs.SASL_JAAS_CONFIG, ...),第二次会覆盖第一次的配置,属于冗余操作,建议删除其中一行(保留通过String.format生成的那行即可)。代码语法错误
props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, "213fsfsK")末尾缺少分号,实际运行时会导致编译错误,需补充完整。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
相关产品推荐
相关产品推荐

