首页 > 解决方案 > SSL 的 JMX 配置 - 获取“java.rmi.ConnectException:连接拒绝主机:”

问题描述

我的应用程序是弹簧启动应用程序。我一直在通过 JMX 简单的基于文件的身份验证访问它,但我正在尝试更改为启用 SSL 的配置。

这是我的 JMX 属性。它在基于文件的身份验证中运行良好,因此打开了端口 9911。

jmxconfig.properties - 包含所有必要的选项。

com.sun.management.jmxremote=true
com.sun.management.jmxremote.rmi.port=9911
com.sun.management.jmxremote.port=9911
com.sun.management.jmxremote.ssl=true
com.sun.management.jmxremote.registry.ssl=true
com.sun.management.jmxremote.authenticate=true
java.rmi.server.hostname=<my remote server>
com.sun.management.jmxremote.password.file=/apps/conf/jmxremote.password
com.sun.management.jmxremote.access.file=/apps/conf/jmxremote.access
com.sun.management.jmxremote.ssl.config.file=/apps/conf/jmxremote.properties

/apps/conf/jmxremote.properties(从上面)

javax.net.ssl.keyStore=/apps/conf/data-ssl.keystore
javax.net.ssl.trustStore=/apps/conf/jconsole.truststore
javax.net.ssl.keyStorePassword=xxxxxxxxxx
javax.net.ssl.trustStorePassword=xxxxxxxxxx

JMX_OPTION="-Dcom.sun.management.config.file=/apps/conf/jmxconfig.properties"

java ${JMX_OPTION} -jar myapplication.jar

我正在使用以下命令启动 jconsole。

jconsole -debug -J-Djavax.net.ssl.keyStore=/apps/local/conf/data-ssl.keystore -J-Djavax.net.ssl.keyStorePassword=xxxxxxxxxx -J-Djavax.net.ssl.trustStore=/apps/local/conf/jconsole.truststore -J-Djavax.net.ssl.trustStorePassword=xxxxxxxxxx -J-Djava.util.logging.config.file=/apps/local/conf/jmxlogging.properties

我正在使用在远程服务器中配置的相同密钥库和信任库文件。所有文件都在正确的位置,并且密钥库 pswd 是正确的。但是当我尝试连接 jconsole 时,出现以下异常。

java.rmi.ConnectException: Connection refused to host: <my server ip address>; nested exception is: 
    java.net.ConnectException: Operation timed out (Connection timed out)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:623)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(RegistryImpl_Stub.java:116)
    at sun.tools.jconsole.ProxyClient.checkSslConfig(ProxyClient.java:234)
    at sun.tools.jconsole.ProxyClient.<init>(ProxyClient.java:127)
    at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:475)
    at sun.tools.jconsole.JConsole$3.run(JConsole.java:524)
Caused by: java.net.ConnectException: Operation timed out (Connection timed out)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:606)
    at java.net.Socket.connect(Socket.java:555)
    at java.net.Socket.<init>(Socket.java:451)
    at java.net.Socket.<init>(Socket.java:228)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:617)
    ... 8 more

我的配置有什么问题吗?

标签: jmxspring-jmx

解决方案


推荐阅读