SSLHandshakeException与Tomcat服务器上的有效证书

时间:2018-02-16 19:48:03

标签: java ssl ssl-certificate tomcat8 sslhandshakeexception

我有一个Apache Web服务器,面向运行我的网站的Tomcat 8 Web服务器,我正在将顶级域名从my.website.ie切换到my.website.com。我有一些代码运行以响应生成PDF的特定请求。该代码获取从同一Web服务器提供的图像(使用URL),例如

Image.getInstance(new URL("https://my.website.com/img/myimage.png"))

除了域名更改,我还将我的SSL证书提供程序更改为LetsEncrypt(免费SSL证书)。我的新.com域中的开发网站正在运行,证书有效,并且不会在几个月后过期。

我在另一台仍在使用.ie域的计算机上运行另一台开发服务器。在这两个服务器上运行的Tomcat代码库现在都是相同的。他们都试图在该特定代码段中的上面显示的URL处获取图像。

.ie服务器上,生成PDF的请求可以正常工作,而不会在获取图像时出现任何问题。在.com服务器上,请求失败并显示以下错误:

  

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

我对此错误的理解是目标网址上的证书不受信任(例如自签名),但在这种情况下不是这样。此外,两个服务器都在为图像命中相同的URL,那么为什么一个服务器信任证书而另一个服务器不信任?

我没有在.ie服务器上对.com服务器上没有进行任何其他配置更改(关于设置新证书),还有其他一些(mis)配置,我没有考虑过?

2 个答案:

答案 0 :(得分:3)

不信任意味着软件不信任使用过的CA. 永远不会信任自签名证书。

Java拥有自己的信任存储(仅在Linux上,系统信任存储使用AFAIR?)。如果CA证书比使用的Java版本新,则可能发生Java不信任CA.结论:更新Java。

根据Stackoverflow的回答,至少需要Java 8u101才能获得Let的加密支持:

Does Java support Let's Encrypt certificates?

答案 1 :(得分:1)

该错误表明该链不会导致受信任的根证书。受信任的CA根证书存储在Java的根密钥库中,其中由Let的加密发出的根证书明显丢失。

您可以手动将根证书添加到商店,也可以检查新版本的Java是否已包含证书。