cacerts与基于cxf的客户端中的jks相比

时间:2013-12-19 18:56:56

标签: java ssl cxf truststore jks

我正在尝试配置基于cxf的客户端与我编写的Web服务(也是基于cxf的)进行通信。

网络服务本身运行完美,通过soapUI进行测试。

然而,客户端在调用throws a SunCertPathBuilderException时构建正常。

怀疑这与提供包含服务器证书的信任的有效路径,以及到受信任证书的有效证书链有关,我首先尝试将该服务器的证书导出到PFX这样我就可以将它导入项目自己的.jks。结果证明这是不可能的,因为它需要一个导出实用程序(certmgr.msc)灰色for some reason的私钥。

所以我尝试从另一个方向解决问题:我知道soapUI通过SSL与Web服务进行通信没有问题,我没有为它安装任何证书,因此必须满足于根证书(CA)已存在于其cacerts文件中。

但是...... http:conduit部分我的基于CXF的应用程序上下文.xml需要一个JKS类型的密钥库......所以看起来我处于catch 22状态。

除非cacerts文件属于JKS类型?

如果没有,有没有办法将证书从cacerts转换或导出到.jks

解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

要查找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

所以答案是:

  1. 是的,cacerts属于 JKS 类型。
  2. 无需将cacerts转换为JKS,因为它已经采用该格式。

  3. 解决此问题的一种方法是在Tomca'ts server.xml目录(在客户端的服务器中)中找到conf文件,然后找出如何在中指定证书或信任存储区<Connector元素,然后......

  4. 如果需要将新内容添加到客户端的信任存储区,请找到用于在客户端服务器上安装证书的原始.crt和密钥文件。

    否则,只需将客户端的应用程序上下文XML指向soapUI使用的同一个信任存储区(因为它已被证明有效)。