代码之家  ›  专栏  ›  技术社区  ›  Ketan

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

  •  0
  • Ketan  · 技术社区  · 7 年前

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

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

    javax。网ssl。SSLHandshakeException:太阳。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径

    我读到了一些关于堆栈溢出的回答,其中谈到了将ssl上下文设置为信任没有证书的外部服务。但我不确定这是否是正确的方式。请注意,我正在Windows 7机器上运行spring boot with Java 8。

    我错过什么了吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Stephen Rauch Afsar Ali    7 年前

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

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

    另一个更简单的选择是只要求IT团队将供应商服务排除在SSL检查之外。