- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 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 console/main function app中请求URL的代码和Tomcat运行的代码完全一致(使用java.net.HttpURLConnection
)。
如果我尝试用“https://google.com”替换我请求的 URL,它在主函数和 Web 应用程序代码中都有效。
我很迷茫:如果证书确实无效,为什么它可以使用 java MyClass
工作?如果证书有效,为什么它在网络应用程序中不起作用?
最佳答案
也许您的 tomcat 应用程序服务器(失败)运行的 JRE 版本与您的单元测试所使用的 JRE 版本不同?
也许它使用的是与强密码不兼容的先前版本,即使我们可以确保使用相同的 keystore 文件,它也会失败。在这种情况下,您只需确保 JRE 版本相同即可。
看看https://www.java.com/en/jre-jdk-cryptoroadmap.html查看 JRE 版本和密码算法之间的详细文档和兼容性矩阵。
关于java - PKIX 证书路径错误 : ok with java, 不适用于 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49068333/
我是一名优秀的程序员,十分优秀!