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

如何在ActiveMQ Artemis集群中配置SSL及排查握手报错

错误根因

你当前配置中acceptor添加了needClientAuth=true参数,该参数会强制开启TLS双向认证,要求所有连接到该acceptor的客户端(包含集群中其他节点的connector)都必须提交客户端证书,但你当前的connector仅配置了truststore未配置keystore,无法提供客户端证书,因此触发Empty client certificate chain握手错误。


配置规则说明

两种TLS认证模式的配置规则如下:

  • 单向TLS认证(仅客户端校验服务端身份,符合你的使用场景)
    • acceptor仅需配置keystore(存储服务端自身的证书和私钥),无需开启客户端认证参数
    • connector仅需配置truststore(存储受信任的服务端CA证书,用于校验对端服务端证书合法性),无需配置keystore
  • 双向TLS认证
    • acceptor需配置keystore,开启needClientAuth=true,同时配置truststore(存储受信任的客户端CA证书,用于校验客户端提交的证书)
    • connector需同时配置truststore(校验服务端证书)和keystore(存储自身客户端证书,用于提交给服务端认证)

正确配置方案

你不需要双向认证,直接删除两个节点acceptor配置中的needClientAuth=true即可,其余配置保持不变即可正常运行。
修改后的配置示例:

Server1

<connectors>
   <connector name="netty-connector">tcp://server1:61616?enabledProtocols=TLSv1.2;sslEnabled=true;trustStorePath=client-ca-truststore.jks;trustStorePassword=securepass</connector>
</connectors>
  
<acceptors>
   <acceptor name="artemis">tcp://0.0.0.0:61616?protocols=CORE,AMQP,STOMP,HORNETQ,OPENWIRE;sslEnabled=true;keyStorePath=server1-keystore.jks;keyStorePassword=securepass</acceptor>
</acceptors>

Server2

<connectors>
   <connector name="netty-connector">tcp://server2:61616?enabledProtocols=TLSv1.2;sslEnabled=true;trustStorePath=client-ca-truststore.jks;trustStorePassword=securepass</connector>
</connectors>
  
<acceptors>
   <acceptor name="artemis">tcp://0.0.0.0:61616?protocols=CORE,AMQP,STOMP,HORNETQ,OPENWIRE;sslEnabled=true;keyStorePath=server2-keystore.jks;keyStorePassword=securepass</acceptor>
</acceptors>

补充注意事项

你使用的client-ca-truststore.jks需要同时导入Server1和Server2自签名证书的公钥,确保两个节点的connector可以正常验证对端acceptor的证书合法性。
另外needClientAuth是TLS层的证书认证开关,和业务层的用户名密码认证互相独立,开启该参数后无论是否配置用户名密码,都会强制要求客户端提交TLS证书。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:27:01