Я занимаюсь разработкой Spring Boot Application v2.0. Из моего приложения Spring Boot я отправляю SOAP-запрос на получение данных из Soap WS. У меня есть несколько запросов Soap к различным веб-службам Soap. Каждый Soap WS имеет свой собственный сертификат. Я использовал Apache CXF v3.2.4 для автоматической генерации классов "ws client" и всего остального для WS.
Сертификаты в формате PFX. Я успешно создал хранилище ключей через keytool. Я попытался настроить ssl.keyStore с помощью этого кода (также это не очень хороший способ установки этих значений, я предполагаю, что лучше сделать это в свойствах приложения ...:
System.setProperty("javax.net.ssl.keyStore","path to my keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
У меня в хранилище ключей 3 разных сертификата. Все они тестируются отдельно, и все они отлично работают, если они находятся только в хранилище ключей. Проблема в том, что когда у меня есть, например, 3 сертификата в хранилище ключей, загружается только первый в списке.
Я прочитал несколько статей в Интернете, эта статья была наиболее интересной, но, к сожалению, она не решила мою проблему ( Регистрация нескольких хранилищ ключей в JVM ).
Если я пройду через цепочку сертификатов по псевдониму, я смогу увидеть все сертификаты в консоли.
String storename = "C:/Certificates/mykeystore.ks";
char[] storepass = "mypassword".toCharArray();
String alias = "myalias";
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(storename), storepass);
java.security.cert.Certificate[] cchain = ks.getCertificateChain(alias);
List mylist = new ArrayList();
for (int i = 0; i < cchain.length; i++) {
mylist.add(cchain[i]);
}
CertificateFactory cf = CertificateFactory.getInstance("X.509");
CertPath cp = cf.generateCertPath(mylist);
System.out.println(cp);
У вас есть предложения ?! Что я должен сделать, чтобы достичь стадии, когда я могу загрузить одно хранилище ключей с несколькими сертификатами или все, что будет работать?
Заранее спасибо.
p.s. Также я попытался поместить эти сертификаты в jdk / jre / lib / security / cacerts через Portecle, но безрезультатно.