Java Apache httpclient调用https服务需要Server证书吗?

Does Java Apache httpclient need Server certificate to call https service?

我需要从 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:无法找到请求目标的有效证书路径

我在 Stack overflow 上阅读了一些关于设置 ssl 上下文以信任没有证书的外部服务的答案。但我不确定这是否是正确的方法。请注意,我 运行 spring 在 Windows 7 机器上使用 Java 8 启动。

我是不是遗漏了什么?

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

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

其他更简单的选择是直接要求 IT 团队将供应商服务排除在 SSL 检查之外。