0

外部 SOAP Web サービスにアクセスすると、例外がスローされます。

javax.xml.ws.WebServiceException:

 Failed to access the WSDL at:
  https://<IP>/ws/services/Webservice?wsdl.

It failed with:

 java.security.cert.CertificateException:
  PKIX path building failed:

   sun.security.provider.certpath.SunCertPathBuilderException:
    unable to find valid certification path to requested target.

この URL にアクセスできません。顧客に WAR ファイルを送信する必要があり、顧客は別の環境である IBM Liberty アプリ サーバーにデプロイする必要があります。この環境では、ルート、中間、真の証明書自体の 3 つの証明書が既に構成されていると彼は言います。

コードで何かをリファクタリングする必要があると主張し、外部エンドポイントを呼び出す前にこれを行い、certificateFileパラメーターとして証明書を渡しました (それらはすべて src/main/resources 内にあります):

Certificate certificate = CertificateFactory.getInstance("X.509").generateCertificate(new FileInputStream(certificateFile));

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry("server", certificate);

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);

if (url.contains("https")) {
    HttpsURLConnection connection = (HttpsURLConnection) new URL(url).openConnection();
    connection.setSSLSocketFactory(sslContext.getSocketFactory());
} else if (url.contains("http")) {
    new URL(url).openConnection();
}

これらの証明書を信頼するための実際の手順と、これらの手順を実行する必要がある場所 (アプリケーション、サーバー、マシン JVM など) は何ですか?

4

1 に答える 1

0

これが Liberty 内で実行されている場合、特別なコードは必要ありません。https://www.ibm.com/support/knowledgecenter/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_add_trust_cert.htmlに記載されているように、おそらくリモート Web サービスから Liberty のトラスト ストアに証明書を追加する必要があります。

于 2020-03-18T13:37:42.260 に答える