ssl - 如何为远程 JMX 连接设置自定义 RMI 客户端套接字工厂?
问题描述
我正在开发一个原型应用程序,用于从多个安全 JMX 服务器获取数据。我正在使用自定义 ssl rmi 工厂,它使用适当的信任库和密钥库创建套接字。但是,JMX 连接器存根不会调用它。
相反,我在客户端应用程序中收到此错误
java.rmi.ConnectIOException: non-JRMP server at remote endpoint
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:248)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2404)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)
at Client.main(Client.java:86)
服务器
HashMap env = new HashMap();
SslRMIServerSocketFactory ssf = new SslRMIServerSocketFactory();
env.put(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE,ssf);
JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);
System.out.println("\nStart the RMI connector server");
cs.start();
客户
HashMap env = new HashMap();
SslRMIClientSocketFactory csf1 = new CustomSslRMIClientSocketFactory();
RMIClientSocketFactory csf2 = RMISocketFactory.getDefaultSocketFactory();
env.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, csf1);
env.put("com.sun.jndi.rmi.factory.socket", csf2);
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:9999/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
System.out.println("connection id " + jmxc.getConnectionId());
运行原型应用程序的步骤
- 在端口 9999 上启动 rmiregistry(不安全)
- java -Djavax.net.ssl.keyStore=config/keystore -Djavax.net.ssl.keyStorePassword=密码服务器
- java客户端
解决方案
推荐阅读
- python - 如何在 python 中导入 csv 文件中的变量值?
- php - Mysql 插入 jQuery $(this).attr('id')
- python - Key Error: 1 在处理上述异常的过程中,又发生了一个异常
- wordpress - 如何将wordpress的插件升级到第五版?
- docker - 我的 cloudbuild.yaml 失败了。请查看我的 cloudbuild.yaml
- python - 下载 huggingface 预训练模型
- elasticsearch - 在 ElasticSearch 中实现搭配
- flutter - 我可以将持续时间设置为 fluttertoast 吗?
- ajax - Laravel Ajax 不工作,该路由不支持 GET 方法。支持的方法:POST
- c - 为什么我的输出后面多了一行?