我正在尝试配置基于 cxf 的客户端以与我编写的 Web 服务(也是基于 cxf)进行通信。
Web 服务本身运行完美,通过 soapUI
测试。
然而,客户端在调用 throws a SunCertPathBuilderException 时构建良好。
怀疑这与提供包含服务器证书的信任库的有效路径有关,并提供到受信任证书的有效证书链,我首先尝试将该服务器的证书导出到 PFX这样我就可以把它导入到项目自己的.jks
中了。结果证明这是不可能的,因为它需要导出实用程序 (certmgr.msc
) 使 for some reason 变灰的私钥。
所以我尝试从不同的方向解决这个问题:我知道 soapUI 通过 SSL 与 Web 服务通信没有问题,而且我没有为它安装任何证书,所以它必须满足根证书(CA) 已存在于其 cacerts 文件中。
但是... http:conduit
部分我基于 CXF 的应用程序上下文 .xml
需要一个 JKS 类型的 keystore ...所以看起来我在 catch 22 的情况。
除非 cacerts
文件是 JKS 类型?
如果没有,是否有办法将证书从 cacerts
转换或导出到 .jks
?
解决这个问题的正确方法是什么?
最佳答案
要查找 cacerts 文件的类型,只需使用 keytool:
~> keytool -list -keystore cacerts
Enter keystore password:
***************** WARNING WARNING WARNING *****************
* The integrity of the information stored in your keystore *
* has NOT been verified! In order to verify its integrity, *
* you must provide your keystore password. *
***************** WARNING WARNING WARNING *****************
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 77 entries
所以答案是:
- 是的,
cacerts
属于JKS类型。 不需要将 cacerts 转换为 JKS,因为它已经是那种格式。
解决这个问题的一种方法是找到
server.xml
Tomca 中的文件conf
目录(在客户端的服务器中),然后找出证书或信任库是如何在<Connector
中指定的元素,那么……
如果需要将新的东西添加到客户端的信任库中,找到原来的.crt
以及用于在客户端服务器上安装证书的 key 文件。
否则,只需使客户端的应用程序上下文 XML 指向 soapUI 使用的同一信任库(因为它已被证明有效)。
关于java - 基于 cxf 的客户端中的 cacerts 与 jks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689546/