我试图让启用SSL的JMX访问ActiveMQ(运行在java 1.6.0下的5.8.0或5.9.0),但我没有任何运气。 过去我已经处理了启用SSL的JMX访问,所以我对设置密钥库,信任库等方面非常熟悉。我们的服务器都位于AWS,所以我们还必须通过防火墙来处理漏洞。 通过在activemq.xml文件中指定以下内容,我可以将未encryption的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服务器端口运行该命令,则会收到一条消息,指出没有对等证书可用。
是否有可能SSLencryptionJMX访问到ActiveMQ,或者我运气不好,因为它似乎其managementContext不支持它?