确定导致 Java 应用失败的必需(缺失)证书

确定导致 Java 应用失败的必需(缺失)证书

我使用的是 Intellij IDEA 15,这是一款基于 Java 的 IDE。它允许我单击项目中任何开源 Java 类中的链接,并从互联网上下载源代码和文档。但是,此功能现在失败了,因为我们必须通过代理服务器进行证书替换。虽然我使用的 Windows 系统知道本地证书,但我使用的 Java VM 不知道它,因此下载过程失败并出现此错误:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决方案似乎是从我的 Windows 框的证书存储中导出正确的证书并将其添加到 JVM 证书存储中/jre/lib/security/cacert,但我不知道 Windows 存储中的数十个证书中缺少哪一个。

有人能建议一种调试方法来识别缺少哪个证书吗?在我自己的代码中,我会使用 Intellij 设置一个断点并查看传递的值,但由于问题是Intellij 内部我真的不知道如何获得这些价值观。

如果需要将其移至其他 StackExchange 社区,我将不胜感激任何帮助,我理解。

答案1

代理服务器总是很有趣!

好的。追踪证书问题的诀窍是根证书是最重要的证书. 根证书信任链是 CA,如果您的系统信任 CA,那么它也会信任它所签名的所有内容。相反,如果 CA 不受信任,那么它所签名的所有内容都是无效的。

您的 Windows 已配置为信任 CA,这可能是当地 IT 部门的功劳。然而,Java 却不是。

因此:您需要获取在代理服务器上生成证书的 CA 密钥,并将其插入到您的 Java 密钥库中。

您可以通过在任何 Web 浏览器上打开任何安全站点、打开页面属性并查看实际证书来找到它。在 Firefox 上,它看起来像这样:

Firefox 证书属性

您可以单击顶层,这里称为“COMODO ECC 认证机构”,将其导出,然后使用 javakeytool将其安装为 CA。

注意:在您的设置中,名称肯定会有所不同。很有可能,它不会是像 Comodo 或 Verisign 这样的以证书闻名的公司名称,而是像 Barracuda 或 Bluecoat 这样的设备供应商的名称

keytool有关 Windows 上工作原理的更多详细信息可在此处获得

相关内容