我有一个Apache Web服务器对开运行我的网站在Tomcat 8 Web服务器,而我从切换顶级域名my.website.ie
来my.website.com
。我有一些代码可以响应生成 PDF 的特定请求。该代码获取从同一网络服务器提供的图像(使用 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 上的证书不受信任(例如自签名),但在这种情况下并非如此。此外,两台服务器都访问相同的图像 URL,那么为什么一台服务器信任证书而另一台不信任?
我没有在.ie
服务器上进行任何我没有在服务器上进行的其他配置更改.com
(关于设置新证书),那么还有其他一些我没有考虑过的(错误)配置吗?
不受信任意味着使用的 CA 不受软件信任。自签名证书从不可信。
Java 有它自己的信任库(仅在 Linux 上使用系统信任库AFAIR?)。如果 CA 证书比使用的 Java 版本新,则 Java 可能不信任 CA。结论:更新你的Java。
根据此 Stackoverflow 答案,您至少需要 Java 8u101 才能支持 Let's Encrypt:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句