很好的文档是如何配置默认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
。我应该非常感激。
微米。
答案 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
逻辑。