0
私はJMXの初心者です。リモートサーバーに接続し、mbeansからデータを読み取るカスタムJMXクライアントを作成する必要があります。ここでSSLHandshakeExceptionに起因するJMXの接続エラー
は、私がこれまで持っているアプリのコードは次のとおりです。
String url = "service:jmx:rmi:///jndi/rmi://host:port/jmxrmi";
JMXServiceURL serviceURL = new JMXServiceURL(url);
Map env = new HashMap();
String[] creds = { "role", "password" };
env.put(JMXConnector.CREDENTIALS, creds);
JMXConnector cc = JMXConnectorFactory.connect(serviceURL, env);
MBeanServerConnection mbsc = cc.getMBeanServerConnection();
私は私のアプリを起動すると、私はエラー(フルスタックトレースを追加するように変更)以下の取得:すべてのヘルプは
Exception in thread "main" java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:304)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308)
at Main.main(Main.java:21)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2430)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.DataOutputStream.flush(DataOutputStream.java:123)
... 9 more
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:229)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
... 20 more
at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
... 26 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
をだろう感謝する。
信頼できる証明書がありません。 * -Djavax.net.debug = all *オプションを使用してアプリケーションを実行し、証明書内の正確な問題をデバッグします。たぶん自分で署名している場合は、それをtrustoreにインポートする必要があります。または、CAが認識されない場合は、トラストアでCA証明書をインポートする必要があります。 –
@MarioAlexandroSantiniアドバイスした通りに完全なスタックトレースを追加しました –
例外は、証明書チェーンに問題があると言います。私はサーバかクライアントかわからない。サーバーには信頼できる証明書がないように見えます。クライアントをjvmオプション* -Djavax.net.debug = all *で実行します。これは、サーバーからの証明書などの多くの情報を出力し、ターゲットに合ったものが見つからない理由を正確に伝えます。 –