构建一个处理SSL的JMXConnectorServer

时间:2016-09-05 16:26:57

标签: java ssl jmx tls1.2 jconsole

很好的文档是如何配置默认JMX连接器来处理来自JConsole等JMX客户端的TLS / SSL安全连接,例如:

-Dcom.sun.management.jmxremote.port=6789 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=true \
-Djavax.net.ssl.keyStore=/path/to/the/keystore.jks \
-Djavax.net.ssl.keyStorePassword=secr3t

将JConsole与此连接器一起使用时,可以防止警告“安全连接失败”。不安全地重试?',有些用户觉得很惊人(警告,而不是预防)。

在构建JMXConnectorServer时,如何以编程方式实现同​​样的目标,例如

JMXConnectorServerFactory.newJMXConnectorServer(url, env, mBeanServerFactory);

任何人都可以向我推荐一个经过验证的例子吗?这同样适用于构建RMIRegistry。我应该非常感激。

微米。

1 个答案:

答案 0 :(得分:2)

Properties props = new Properties();
props.setProperty("com.sun.management.jmxremote.authenticate", "false");
props.setProperty("com.sun.management.jmxremote.ssl", "true");
props.setProperty("com.sun.management.jmxremote.registry.ssl", "true");

// Either set SSL properties via System.setProperty() or load an external config file
// props.setProperty("com.sun.management.jmxremote.ssl.config.file",
//                   "/path/to/ssl.properties");

System.setProperty("javax.net.ssl.keyStore", "/path/to/the/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "secr3t");

JMXConnectorServer server = sun.management.jmxremote.ConnectorBootstrap
        .startRemoteConnectorServer("6789", props);

这是以编程方式启动支持SSL的JMXConnectorServer的最简单方法。它依赖于私有sun.management API。您也可以在没有私有API的情况下执行此操作,但是您必须复制大部分ConnectorBootstrap逻辑。