Java Apache httpclient是否需要服务器证书才能调用https服务?

时间:2018-01-30 18:20:27

标签: java ssl https apache-httpclient-4.x tls1.2

我需要从Java Spring启动应用程序调用供应商https服务。根据供应商的说法,这项服务支持TLS 1.2,它看起来像是在Java 8中默认启用的。当我向供应商询问他们的服务器证书时,他们说我们不需要证书,因为他们使用的是verisign颁发的根证书存在于Java信任库中。

但是当我使用Apache httpclient调用此服务而没有明确设置任何ssl上下文时,我收到了以下错误:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径

我在堆栈溢出上读了几个答案,谈到设置ssl上下文以信任外部服务而没有他们的证书。但我不确定这是否正确。请注意,我在Windows 7计算机上使用Java 8运行spring boot。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我想出了这个问题。虽然供应商使用的是Verisign颁发的根证书,该证书存在于Java默认信任库中,但事实证明我们的IT安全团队已对所有传出请求启用了SSL检查,而不是Verisign,我们看到安全代理发出的SSL证书时访问供应商服务。由于该证书不在信任库中,因此我收到了SSL握手错误。

为了在我们的机器上运行,我创建了一个jks密钥库并向其添加了安全代理证书。当然,我不必在生产环境中这样做,因为我们的服务器(显然)没有进行SSL检查。

其他更简单的选择就是让IT团队从SSL检查中排除供应商服务。