通过SSL连接到Gemfire的JMX

问题描述 投票:0回答:1

我已经使用GFSH来启动定位器,如下所示

start locator --name=gemfire_locator --security-properties-file="../config/gfsecurity.properties" --J=-Dgemfire.ssl-enabled-components=all --mcast-port=0 --J=-Dgemfire.jmx-manager-ssl=true

也启动了服务器

start server --name=server1 --security-properties-file="../config/gfsecurity.properties" --J=-Dgemfire.ssl-enabled-components=all --mcast-port=0 --J=-Dgemfire.jmx-manager-ssl=true

我正在尝试连接到Gemfire作为ClientCache,它在SSL上运行得非常好。但是当我作为JMX客户端连接时,我在Java代码以及Jconsole中遇到以下错误。

Error: 
Exception in thread "main" java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:369)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)
    at SamplePlugin.main(SamplePlugin.java:101)

我错过了其他任何配置吗?

这是我的JAVA_TOOL_OPTIONS

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=true
-Djava.rmi.server.hostname=myhostname
ssl jmx gemfire
1个回答
0
投票

您还需要将geode-core jar添加到jvisualvm的类路径中。使用--cp:a选项。我建议只使用geode-dependencies.jar,因为这将获得你可能需要的一切。

需要这个的原因在ContextAwareSSLRMIClientSocketFactory的评论中有所解释。基本上似乎当RMI使用SSL时,必要的RMIClientSocketFactory从服务器导出到客户端以便在那里使用。一般来说,这只是SslRMIClientSocketFactory。但在我们的例子中,我们有一个自定义套接字工厂,因此客户端(在这种情况下为jvisualvm)需要访问它。

© www.soinside.com 2019 - 2024. All rights reserved.