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 检查之外。
我需要从 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 检查之外。