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

Spring JMS生产者通过SSL连接Artemis MQ失败出现信任库路径异常

问题原因

你开启HA模式后,ActiveMQ Artemis集群会将broker.xml中配置的所有connector信息作为集群拓扑推送给已连接的客户端。客户端后续连接集群其他节点时,会优先使用拓扑中connector URL附带的所有参数,包括你硬编码在服务端connector里的trustStorePath、trustStorePassword等SSL配置,直接覆盖你在客户端连接URL中配置的全局SSL参数。
服务端connector里写的/home/artemis_certs/xxx/client_ts.p12是Broker服务器本地的路径,客户端机器上不存在该路径,因此会抛出找不到信任库的错误。集群节点之间通信正常是因为这些路径在Broker服务器上真实存在。

解决方案

两种方案二选一即可:

方案1:修改服务端配置(推荐,适配所有客户端)

将服务端broker.xml中所有connector URL里的SSL配置(trustStorePath、trustStorePassword、keyStorePath、keyStorePassword)移除,统一放到broker的全局SSL配置段中,配置示例如下:

<core xmlns="urn:activemq:core">
  <!-- 新增全局SSL配置,供集群内部通信使用 -->
  <ssl>
    <key-store path="/home/artemis_certs/${broker.name}/broker_ks.p12" password="keyStorePassword"/>
    <trust-store path="/home/artemis_certs/${broker.name}/client_ts.p12" password="trustStorePassword"/>
  </ssl>

  <connectors>
    <!-- 移除每个connector里的SSL路径、密码参数,仅保留sslEnabled=true -->
    <connector name="amq1-master">tcp://amq1:61616?sslEnabled=true</connector>
    <connector name="amq1-slave">tcp://amq2:61616?sslEnabled=true</connector>
    <!-- 其余connector同理修改 -->
  </connectors>
  <!-- 其余配置保持不变 -->
</core>

修改后重启所有Broker节点,推送的拓扑信息就不会携带服务端的证书路径,客户端会使用自身配置的SSL参数连接所有节点。

方案2:修改客户端配置(无需改动服务端,快速生效)

在客户端的JMS连接URL末尾新增参数useTopologyForSSL=false,强制客户端忽略集群拓扑推送的SSL配置,始终使用客户端自身配置的SSL参数连接所有节点,修改后的URL示例:

jms.artemis.broker.url=(tcp://amq1:61616,tcp://amq2:61616,tcp://amq3:61616,tcp://amq4:61616,tcp://amq5:61616,tcp://amq6:61616)?ha=true&sslEnabled=true&trustStorePath=/home/cert/client_ts.p12&trustStorePassword=trustStorePassword&keyStorePath=/home/cert/broker_ks.p12&keyStorePassword=keyStorePassword&useTopologyForSSL=false

修改后确认客户端/home/cert/client_ts.p12已导入所有6个Broker节点的证书公钥,密码配置正确即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:03