外部 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 など) は何ですか?