【发布时间】:2018-12-12 00:23:11
【问题描述】:
我正在开发 Spring Boot Application v2.0。从我的 Spring Boot 应用程序中,我发送 SOAP 请求以从 Soap WS 获取数据。我对不同的 Soap Web 服务有多个 Soap 请求。每个 Soap WS 都有自己的证书。我使用 Apache CXF v3.2.4 自动生成“ws 客户端”类以及 WS 的所有其他内容。
证书采用 PFX 格式。我已经通过 keytool 成功创建了密钥库。我尝试使用此代码设置 ssl.keyStore (这也不是设置这些值的好方法,我认为最好在应用程序属性中进行...:
System.setProperty("javax.net.ssl.keyStore","path to my keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
我的密钥库中有 3 个不同的证书。它们都经过单独测试,如果它们只有一个在密钥库中,它们都可以正常工作。问题是,当我在密钥库中有 3 个证书时,只加载列表中的第一个。
我在互联网上阅读了多篇文章,这篇文章最有趣但不幸的是它没有解决我的问题(Registering multiple keystores in 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);
你有什么建议吗?!我应该怎么做才能达到可以加载一个带有多个证书的密钥库或任何可以工作的阶段? 提前致谢。
附言我还尝试通过 Portecle 将这些证书放入 jdk/jre/lib/security/cacerts 但没有效果。
【问题讨论】:
标签: spring-boot ssl-certificate cxf keystore soap-client