Java JMX客户端使用SSL

12

我使用了这篇教程https://tomcat.apache.org/tomcat-7.0-doc/monitoring.html来配置Apache Tomcat 8,并生成了SSL证书。

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://10.16.70.161:9999/jmxrmi");

            HashMap environment = new HashMap();
            String[] credentials = new String[]
            {
                "user", "passw"
            };
            environment.put(JMXConnector.CREDENTIALS, credentials);

            JMXConnector jmxc = JMXConnectorFactory.connect(url, environment);
            MBeanServerConnection server = jmxc.getMBeanServerConnection();

            Set<ObjectName> s2 = server.queryNames(new ObjectName("Catalina:type=Server,*"), null);
            for (ObjectName obj : s2)
            {
                ObjectName objname = new ObjectName(obj.getCanonicalName());
                System.out.println("serverInfo " + server.getAttribute(objname, "serverInfo"));
                System.out.println("address " + server.getAttribute(objname, "address"));
                System.out.println("stateName " + server.getAttribute(objname, "stateName"));
            }

我需要扩展这个JMX客户端以便使用SSL证书,但我在互联网上找不到任何好的例子。

1个回答

7

你已经接近成功了,你的代码是正确的,只需在将SSL证书添加到信任存储库中使用keytool命令行实用程序后,使用以下命令行启动你的JMX客户端:

java -Djavax.net.ssl.trustStore=/your/path/to/truststore.jks \ 
  -Djavax.net.ssl.trustStorePassword=truststore_pwd \ 
  YourJMXClient

为什么要添加SslRMIServerSocketFactory和SslRMIClientSocketFactory? 这是必须的吗? - Peter Penzov
抱歉,这只有在您想创建JMXServer时才是必需的。在这种情况下,您需要做的就是配置您的信任存储并在启动时将其传递给客户端。 - Val
我能否在不使用完全自定义的JMX客户端的情况下,通过Java代码设置trustStore位置和密码?我在这里发布了一个新帖子https://dev59.com/qZLea4cB1Zd3GeqP2G-7 - Peter Penzov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接