Исключение выдается при доступе к внешнему SOAP веб-сервису:
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, на котором, по его словам, уже настроены три сертификата: root, промежуточный и сам настоящий сертификат.
Настаивая на том, что что-то должно быть реорганизовано в коде, я сделал это до вызова внешней конечной точки , передав сертификат в качестве параметра 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, что угодно)?