Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat服务器上具有有效证书的SSLHandshakeException_Java_Ssl_Ssl Certificate_Tomcat8_Sslhandshakeexception - Fatal编程技术网

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

Java Tomcat服务器上具有有效证书的SSLHandshakeException,java,ssl,ssl-certificate,tomcat8,sslhandshakeexception,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证书)。我在新的.

我有一个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.validator异常:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径

原因:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径

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


我没有在
.ie
服务器上进行任何其他配置更改,而我没有在
.com
服务器上进行任何其他配置更改(关于设置新证书),因此是否有其他(mis)配置我没有考虑

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

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

根据这个Stackoverflow答案,您至少需要Java 8u101来支持Let's Encrypt:


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

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

根据这个Stackoverflow答案,您至少需要Java 8u101来支持Let's Encrypt:


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


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

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


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

编辑系统密钥存储不是一个好主意。正确的方法是创建一个包含所需的所有根CA证书的自定义信任存储,并将其用作应用程序中的信任存储。编辑系统密钥存储不是一个好主意。正确的方法是创建一个包含所需的所有根CA证书的自定义信任存储,并将其用作应用程序中的信任存储。