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

ActiveMQ Artemis集群双向认证:证书SAN无法匹配客户端IP问题

问题描述

搭建ActiveMQ Artemis 2.27.1集群并启用双向认证后,第二个节点连接第一个节点时出现SSL握手失败,错误日志如下:

WARN [org.apache.activemq.artemis.core.server] AMQ222208: SSL handshake failed for client from /10.226.95.134:46882: java.security.cert.CertificateException: No subject alternative names matching IP address 10.226.95.134 found.

客户端主机名已包含在信任库证书的SAN字段中,但无法配置acceptor使用主机名而非IP地址进行验证。当前broker.xml相关配置:

<acceptor name="netty-master-acceptor01">
tcp://dev-artemis01:61617?sslEnabled=true;needClientAuth=true;verifyHost=true;keyStorePath=/keys/keystore.jks;keyStorePassword=123;trustStorePath=/keys/trusted_keystore.jks;trustStorePassword=password;protocols=CORE,AMQP
</acceptor>

...

<connector name="netty-master-connector02">
tcp://artemis02:61617?sslEnabled=true;keyStorePath=/keys/keystore.jks;keyStorePassword=123;trustStorePath=/keys/trusted_keystore.jks;trustStorePassword=password
</connector>

通过openssl测试SSL连接正常:

openssl s_server -accept 3000 -key dev_artemis.key -cert dev-artemis.pem -CAfile dev-artemis.pem -state

openssl s_client -connect dev-artemis01:3000 -key dev_artemis.key -cert dev-artemis.pem -CAfile dev-artemis.pem -state

证书SAN字段包含对应主机名,但修改log4j2配置开启SSL日志后服务无法启动,无法进一步调试。

解决方案

1. 修改Acceptor配置,启用IP反向解析

在acceptor参数中添加resolveHostName=true,让服务器将客户端的IP地址反向解析为主机名,再用该主机名匹配证书的SAN字段。修改后的acceptor配置:

<acceptor name="netty-master-acceptor01">
tcp://dev-artemis01:61617?sslEnabled=true;needClientAuth=true;verifyHost=true;resolveHostName=true;keyStorePath=/keys/keystore.jks;keyStorePassword=123;trustStorePath=/keys/trusted_keystore.jks;trustStorePassword=password;protocols=CORE,AMQP
</acceptor>

2. 确保服务器能反向解析客户端IP到主机名

  • 执行nslookup 10.226.95.134测试反向解析,确认返回结果包含客户端主机名artemis02。
  • 若反向解析失败,在服务器(dev-artemis01)的/etc/hosts(Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)中添加映射:
    10.226.95.134 artemis02
    

3. 确认证书SAN字段包含客户端主机名

使用keytool工具检查证书详情,确认SAN中存在客户端主机名:

keytool -printcert -v -file dev-artemis.pem

查看输出中的Subject Alternative Names部分,需包含DNS:artemis02。

4. 修复SSL日志配置(可选)

若需要调试SSL握手,在log4j2.xml中添加以下日志配置(确保格式正确):

<Logger name="org.apache.activemq.artemis.core.remoting.impl.netty" level="DEBUG"/>
<Logger name="javax.net.ssl" level="DEBUG"/>

添加后重启服务,若仍无法启动,检查log4j2配置文件的语法错误(如标签未闭合、格式不符合XML规范)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:14