0

我们使用 Java JDK 1.8.0_112、Tomcat 8.0.32 和 Liferay 框架 7.0-GA4。

我们必须向某个 HTTPS URL 发送 POST 请求。

使用一个简单的 Java 类,所有代码都在 main 函数中,一切正常。

使用 Tomcat(与 Liferay 框架)它不起作用,我们得到以下异常。

 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException

使用 SSL 调试启动选项 ( -Djavax.net.debug=trustmanager,SSL) 我们可以看到使用的信任库在两种情况下确实是相同的/usr/java/jdk1.8.0_112/jre/lib/security/cacerts

Java 控制台/主函数应用程序中请求 URL 的代码与 Tomcat 运行的代码完全相同(使用java.net.HttpURLConnection)。

如果我尝试用“ https://google.com ”替换我请求的 URL,它在主函数和网络应用程序代码中都有效。

我很迷茫:如果证书确实无效,为什么它可以使用java MyClass?如果证书有效,为什么它在 Web 应用程序中不起作用?

4

1 回答 1

1

也许您的失败的 tomcat 应用程序服务器运行的 JRE 版本与您的单元测试使用的 JRE 版本不同?

也许它使用的是与强密码不兼容的先前版本,即使我们可以确保使用相同的密钥库文件,它也会失败。在这种情况下,您应该确保 JRE 版本相同。

查看https://www.java.com/en/jre-jdk-cryptoroadmap.html以查看 JRE 版本和密码算法之间的详细文档和兼容性矩阵。

于 2018-03-02T12:10:24.637 回答