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

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

  •  0
  • RTF  · 技术社区  · 8 年前

    我有一个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的请求工作正常,获取图像时没有任何问题。上 .通用域名格式 服务器,请求失败,出现以下错误:

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

    我对该错误的理解是,目标URL处的证书不受信任(例如自签名),但在本例中并非如此。而且,这两个服务器都访问相同的图像URL,那么为什么一个服务器信任证书而另一个不信任证书呢?

    我没有在上进行任何其他配置更改 .ie 我没有在上创建的服务器 .通用域名格式 服务器(关于设置新证书),那么是否有我没有考虑过的其他(mis)配置?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Robert    8 年前

    不受信任表示软件不信任使用的CA。 从不信任自签名证书。

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

    根据这个Stackoverflow答案,您至少需要Java 8u101才能获得Let’s Encrypt支持:

    Does Java support Let's Encrypt certificates?

        2
  •  1
  •   Lothar    8 年前

    该错误表示链不会生成受信任的根证书。受信任的CA根证书存储在Java的根密钥库中,其中显然缺少Let’s Encrypt颁发的根证书。

    您可以手动将根证书添加到存储中,或者检查较新版本的Java是否已经包含该证书。