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

Pulsar 3.1.0对接仅支持TLSv1.3的Keycloak时出现protocol_version错误

问题描述

我们搭建了启用OIDC认证的Pulsar 3.1.0集群,运行正常,但对接仅支持TLSv1.3的Keycloak实例时,出现fatal alert: protocol_version错误。

调试TLS握手过程发现:

  • 初始通信正常,ClientHello.extensions.supported_versions.versions和ServerHello.extensions.supported_versions.selected_version的值均为TLSv1.3
  • 问题出现在日志打印org.apache.pulsar.functions.worker.Workerutils - Create Pulsar Admin to service ...之后,此时AsyncHttpClient启动的TLS握手失败,对应的ClientHello.extensions.supported_versions.versions为TLSv1.2

已尝试设置PULSAR_EXTRA_OPTS环境变量添加JVM参数,但未生效(已确认环境变量已配置),使用的参数为:

PULSAR_EXTRA_OPTS="-Dhttps.protocols=TLSv1.3 -Dhttps.client.protocols=TLSv1.3 -Djdk.tls.client.protocols=TLSv1.3 -Djavax.net.debug=ssl:handshake"

需求:

  • 是否有其他方式强制指定TLS版本?
  • 这是否是已知问题,有无可行解决办法?
解决思路与方案

1. 显式配置Pulsar客户端的TLS协议

Pulsar Worker的AsyncHttpClient可能未继承全局JVM参数,需在配置文件中直接指定TLS版本:

  • 对于Worker节点,修改conf/functions_worker.yml,添加或更新:
pulsarAdminClient:
  tlsProtocols: ["TLSv1.3"]
  • 对于Broker节点,修改conf/broker.conf:
pulsarClientTlsProtocols=TLSv1.3

修改后重启对应服务。

2. 确认JDK版本兼容性

TLSv1.3要求JDK 11及以上版本支持,先检查当前Pulsar运行环境的JDK版本:

java -version

如果使用JDK 8,即使设置参数也无法启用TLSv1.3,必须升级到JDK 11或更高版本。

3. 直接修改启动脚本的JVM参数

如果PULSAR_EXTRA_OPTS未生效,可能是启动脚本未正确加载该变量,直接修改Pulsar启动脚本(如bin/pulsar),在JVM参数部分添加:

-Dhttps.protocols=TLSv1.3 -Djdk.tls.client.protocols=TLSv1.3

保存后重启Pulsar服务。

4. 已知问题说明

Pulsar 3.x版本中存在AsyncHttpClient未继承全局JVM TLS参数的场景,社区反馈通过显式配置客户端TLS协议可解决此类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:03:24