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

Quarkus 2.x迁移Kafka SSL握手失败,如何覆盖端点验证算法?

Quarkus 2.x 解决Kafka SSL端点识别算法配置被忽略的问题

问题原因

Quarkus 2.x升级后,内置的SmallRye Kafka客户端配置逻辑发生变化:直接在通道配置中设置ssl.endpoint.identification.algorithm=空值会被框架默认值覆盖,导致主机名验证强制启用;同时默认SSL协议切换为TLSv1.3,这两个变化共同引发了SSL握手时的证书DNS匹配错误。

解决方案

1. 全局Kafka客户端配置覆盖

在application.properties中添加全局配置,对所有Kafka客户端生效:

# 全局禁用SSL端点主机名验证
quarkus.kafka.clients.ssl.endpoint.identification.algorithm=
# 全局强制使用TLSv1.2,与Quarkus 1.x保持一致
quarkus.kafka.clients.ssl.protocol=TLSv1.2

2. 单个通道针对性配置

如果只需对特定的消息通道生效,在原有通道配置基础上补充以下参数:

mp.messaging.incoming.ddd.ssl.endpoint.identification.algorithm=
mp.messaging.incoming.ddd.ssl.protocol=TLSv1.2

注:部分Quarkus 2.x版本中,通道级的ssl.endpoint.identification.algorithm配置可能仍被全局默认值覆盖,此时优先使用全局配置方案。

3. 自定义客户端配置类(兜底方案)

如果以上配置均不生效,通过自定义KafkaClientCustomizer手动修改客户端配置:

import io.quarkus.kafka.client.runtime.KafkaClientCustomizer;
import javax.enterprise.context.ApplicationScoped;
import java.util.Map;
import org.apache.kafka.common.config.SslConfigs;

@ApplicationScoped
public class KafkaSslConfigCustomizer implements KafkaClientCustomizer {
    @Override
    public void customize(Map<String, Object> configs) {
        // 强制设置端点识别算法为空,跳过主机名验证
        configs.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, "");
        // 强制指定SSL协议为TLSv1.2
        configs.put(SslConfigs.SSL_PROTOCOL_CONFIG, "TLSv1.2");
    }
}

该类会在Kafka客户端初始化阶段介入,直接修改底层配置参数,确保设置生效。

验证步骤

  1. 启动应用后,查看调试日志,确认ssl.endpoint.identification.algorithm为空,ssl.protocol为TLSv1.2
  2. 测试Kafka消息消费/生产,确认SSL握手成功,不再抛出CertificateException: No subject alternative DNS name matching xxx found错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:25:47