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

如何通过JMX连接ActiveMQ Artemis时用SSL证书替代用户名密码认证

切换ActiveMQ Artemis JMX连接至SSL证书认证

一、证书准备

  • 证书类型:采用JKS或PKCS12格式的证书文件:
    • keyStore:客户端身份证书(双向认证场景需要,用于服务端验证客户端身份)
    • trustStore:存放信任的证书(必须配置,用于客户端验证服务端身份,通常包含服务端证书或签发服务端证书的CA)
  • 证书放置:将证书文件放入项目的resources目录下,便于通过类路径加载,避免硬编码绝对路径。
  • 自签证书处理:若使用自签证书,需将服务端证书导入客户端的trustStore,执行以下命令(替换对应参数):
    keytool -import -alias artemis-server -file server.crt -keystore client-truststore.jks
    

二、修改JMX连接代码

移除原用户名密码认证逻辑,添加SSL证书相关配置,以下是修改后的完整代码:

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public static MBeanServerConnection connectBroker(String brokerUrl, String keyStorePath, String keyStorePass, String trustStorePath, String trustStorePass) {
    MBeanServerConnection mBeanServerConnection = null;
    try {
        // 配置SSL相关系统属性(也可通过JVM启动参数传入:-Djavax.net.ssl.keyStore=...)
        System.setProperty("javax.net.ssl.keyStore", keyStorePath);
        System.setProperty("javax.net.ssl.keyStorePassword", keyStorePass);
        System.setProperty("javax.net.ssl.trustStore", trustStorePath);
        System.setProperty("javax.net.ssl.trustStorePassword", trustStorePass);

        // 单向认证场景:仅保留trustStore相关配置,删除keyStore配置即可
        Map<String, Object> env = new HashMap<>();
        // 指定JMX连接使用SSL协议
        env.put("jmx.remote.profiles", "SSL");

        JMXServiceURL jmxUrl = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + brokerUrl + "/jmxrmi");
        JMXConnector connector = JMXConnectorFactory.connect(jmxUrl, env);
        mBeanServerConnection = connector.getMBeanServerConnection();
        
        DialogsAlert.brokerJmxRmiConnectionSuccess.showAndWait();
        Logger.getLogger(YourClassName.class.getName()).log(Level.INFO, "Success connected to broker: " + brokerUrl);
    } catch (Exception e) {
        Logger.getLogger(YourClassName.class.getName()).log(Level.WARNING, "Failed to connect to broker", e);
    }
    return mBeanServerConnection;
}

三、关键配置说明

  • 证书路径动态加载:若证书放在项目resources下,可通过类路径动态获取路径,避免硬编码:
    String keyStorePath = Thread.currentThread().getContextClassLoader().getResource("client-keystore.jks").getPath();
    String trustStorePath = Thread.currentThread().getContextClassLoader().getResource("client-truststore.jks").getPath();
    
  • 单向/双向认证切换:
    • 单向认证:仅需配置trustStore,删除keyStore相关的系统属性即可(服务端不验证客户端身份,客户端仅验证服务端)
    • 双向认证:同时配置keyStore和trustStore(双方互相验证身份)
  • Broker端SSL配置:确保ActiveMQ Artemis的JMX已启用SSL,在broker.xml中配置:
    <jmxConnector name="rmi" port="1099" ssl-enabled="true">
        <key-store path="server-keystore.jks" password="your-keystore-pass"/>
        <trust-store path="server-truststore.jks" password="your-truststore-pass"/>
    </jmxConnector>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:27