我们使用 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 应用程序中不起作用?