java - 基于 cxf 的客户端中的 cacerts 与 jks

标签 java ssl cxf truststore jks

我正在尝试配置基于 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

所以答案是:

  1. 是的,cacerts属于JKS类型。
  2. 不需要将 cacerts 转换为 JKS,因为它已经是那种格式。

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

如果需要将新的东西添加到客户端的信任库中,找到原来的.crt以及用于在客户端服务器上安装证书的 key 文件。

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

关于java - 基于 cxf 的客户端中的 cacerts 与 jks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689546/

相关文章:

node.js - 如何连接到 Node JS 中的 EPP 服务器(域名注册中心)?

maven - cxf.version 3.2.1 给出 org.apache.cxf.tools.common.ToolErrorListener 错误

java - 我如何在 Java 中使用 JSONata?

java - 从 java.util.date 转换为 JodaTime

python - 使用 ftplib 连接到 FTP TLS 1.2 服务器

python-3.x - python-gitlab api SSL 握手错误 : Error([ ('SSL routines' , 'ssl3_get_server_certificate' , 'certificate verify failed' )],

Apache CXF - 设置 HTTP header

java - Apache CXF(简单前端): 'Already connected' 中的问题

java - 每个组件(.xml)都应该有自己的 eclipse 项目吗?

java - java中将两个变量包装到一个包装类中