2つのアプリケーションがglassfishでホストされています(2)バッチサーバー(スタンドアロンJavaアプリケーション)です。 どちらのアプリも、共通のJavaプログラム(jarファイル形式)を使用して外部サーバーを呼び出しています。私は 'CloseableHttpClient'を使用して、その外部サードパーティサーバに接続しています。 sun.security.validator:私のサーバー1(のglassfish)Iが呼び出すとバッチサーバ上の外部サーバが、同じプログラムからの応答を取得することができていますから は、SSLのexceptoion証明書がcacertファイルにありますが、ssl例外がスローされます
javax.net.ssl.SSLHandshakeException下に投げています.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスを見つけることができません。 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) ) com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747) com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241) com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(H andshaker.java:235) (com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1209) (com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker。 java:135) com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) (com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java: 529) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943) com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) のorg.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:290) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:259) at org.apache。 http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:125)org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:319)org.apache.http.impl.execchainで で 。 (MainClientExec.java:219) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec。 java:195) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache。 http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) (org.apache.http.impl.client.CloseableHttpClient.java:106) (com.csid.sms.util.postup)。 PostUpRestClient.executeRequest(PostUpRestClient.java:169)com.csid.sms.util.postup.PostUpRestClient.executeJsonRequestでcom.csid.sms.util.postup.PostUpRestClient.executeJsonPost(PostUpRestClient.java:134) で (PostUpRestClient。 java:106) at com.csid.sms.util.postup.PostUpEmailRoute.triggerMessage(PostUpEmailRoute.java:213) at itm.mo itm.monitor.SummaryEmailRoute.sendEmail(SummaryEmailRoute.java:49) でcom.csid.sms.messaging.MessagingHandler.triggerMessage(MessagingHandler.java:60) でnitor.SummaryEmailPostupRoute.triggerMessage(SummaryEmailPostupRoute.java:154) でitm.monitor.BatchEmailProcessor.sendEmail(BatchEmailProcessor.java:105) at itm.monitor.BatchEmailProcessor.call(BatchEmailProcessor。java:51) itm.monitor.BatchEmailProcessor.call(BatchEmailProcessor.java:33) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask。実行(FutureTask.java:138) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor $ Worker.run( ThreadPoolExecutor.java:918) (java.lang.Thread.run)(Thread.java:662) 原因:sun.security.validator.ValidatorExce ption:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスを見つけることができませんat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323) at sun.security。 validator.PKIXValidator.engineValidate(PKIXValidator.java:217)at sun.security.validator.Validator.validate(Validator.java:218) com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl。 (X509TrustManagerImpl.java:208) 249) com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1188) ... 37もっと によって引き起こさ:sun.security.provider.certpath.SunCertPathBuilderException:sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)で要求されたターゲット への有効な証明書パスを見つけることができません java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318) で ... 43時より
注 - この管理サーバー(glassfishでホストされている)からではなく、バッチ・サーバーからのみ例外がスローされています。
このエラーを検出した後、外部サーバーから取得した証明書が信頼できる機関によって発行されない可能性があるため、「installCert」(this java program)を使用して証明書をインポートしました。今
は、keytoolのコマンドに
のkeytool -list -keystore cacertsを
を使用してcacertで証明書を検証し、私は外部の証明書が信頼できる証明書のリストに表示されていることがわかります。 ですが、まだSSL例外を超えています。
考えてみませんか? 同じJavaコードを使用している管理サーバー(glassfish)からSSLの期待値が得られないのはなぜですか?グラスフィッシュはブラウザのように自動的に証明書をインポートしますか?
それは本当に両方の異なるJREを使用していると私はバッチサーバーのJREをチェックし、証明書があります。 – vermap