У меня есть фиксированный клиент, который вызывает фиксированный сервер, используя разные хранилища ключей (одно хранилище ключей для компании). В моем java каждый раз, когда я устанавливаю системные свойства trustStore и keyStore следующим образом:
..reading path and password from database..
System.setProperty("javax.net.ssl.trustStore", ..path..);
System.setProperty("javax.net.ssl.trustStorePassword", ..password..);
System.setProperty("javax.net.ssl.keyStore", ..path..);
System.setProperty("javax.net.ssl.keyStorePassword", ..password);
Таким образом, он работает только при первом обращении к серверу (пример «Компания A»). Когда я пытаюсь вызвать сервер с другим хранилищем ключей (например, «Компания B»), ответ от сервера:
javax.xml.ws.soap.SOAPFaultException: IDP Rule 'Process Error' aborted processing.
Это потому, что System.setProperty не обновляется каждый раз, поэтому после первого раза клиент У меня всегда есть хранилище ключей "Компания А". Я пытался также положить все сертифицированные в одном хранилище ключей, но это не работает. В этом случае все пароли должны быть одинаковыми, я думаю. Некоторые идеи?
Обновление после ответа Misantrops
Я пытался с этим кодом:
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream trustStore1 = new FileInputStream(path1);
keyStore.load(trustStore1, password1.toCharArray());
trustStore1.close();
InputStream trustStore2 = new FileInputStream(path2);
keyStore.load(trustStore2, password2.toCharArray());
trustStore2.close();
InputStream trustStore3 = new FileInputStream(path3);
keyStore.load(trustStore3, password3.toCharArray());
trustStore3.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory sslFactory = ctx.getSocketFactory();
Возвращает эту ошибку:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.] with root cause
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target