我正在尝试获取对 ActiveMQ 启用 SSL 的 JMX 访问(在 Java 1.6.0 下运行的 5.8.0 或 5.9.0),但没有任何成功。我过去处理过启用 SSL 的 JMX 访问,因此我非常熟悉如何设置密钥库、信任库等。我们的服务器都位于 AWS,因此我们还必须处理防火墙漏洞。我能够通过在 activemq.xml 文件中指定以下内容来使未加密的 JMX 在我们的 ActiveMQ 服务器上工作:
<managementContext>
<managementContext connectorPort="1099" rmiServerPort="1098" connectorHost="<local IP of AWS instance>" />
</managementContext>
并在启动 ActiveMQ 时指定以下 Java 参数:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.password.file=/path/to/jmx.passwd
-Dcom.sun.management.jmxremote.access.file=/path/to/jmx.access
-Djava.rmi.server.hostname=<public IP of AWS instance>
managementContext 显然没有支持 SSL 的参数,因此我尝试在我的 Java 命令行上包含以下内容(它可以与我们的其他 Java 应用程序一起通过 SSL 访问 JMX):
-Dcom.sun.management.jmxremote.ssl=true
-Djavax.net.ssl.keyStore=/path/to/keystore
-Djavax.net.ssl.trustStore=/path/to/truststore
-Djavax.net.ssl.keyStorePassword=<password>
-Djavax.net.ssl.trustStorePassword=<password>
-Dcom.sun.management.jmxremote.ssl.need.client.auth=false
看来 ActiveMQ 只是忽略了这些设置。如果我使用命令“openssl s_client -connect :”查询 JMX/SSL 正在运行的 Java 进程的 RMI 服务器端口,那么它会显示有关正在使用的证书的所有详细信息。但是,如果我针对 ActiveMQ RMI 服务器端口运行该命令,我会收到一条消息,指示没有可用的对等证书。
是否可以通过 SSL 加密 JMX 访问 ActiveMQ,或者我运气不好,因为他们的 managementContext 似乎不支持它?