使用Java在HTTPS上发出请求时找不到可信证书

使用Java在HTTPS上发出请求时找不到可信证书

我是一名 Java 开发人员,我需要使用特定版本的 java 8 (1.8.0_162),也无法使用 OpenJDK。

但是,当我尝试从我的 java 程序中连接/获取/下载/任何内容时,我收到此错误HTTPS 网址

sun.security.validator.ValidatorException:找不到受信任的证书

我知道代码是正确的,因为它可以在生产环境中运行,但我可以在本地计算机上运行代码。

我认为与证书有关,但不知道如何解决。

答案1

JDK 和 JRE 附带了它们自己的可信证书集合。该文件名为“cacerts”,可以在JDK_HOME/jre/lib/security.readlink -f /bin/java应指示 JDK_HOME 目录所在的位置。

cacerts 文件包含来自受信任的证书颁发机构 (CA) 的所有证书的列表。该文件采用 JKS 格式,因此您可以使用keytool(属于 JDK 的另一个命令)对其进行操作。您将需要 root 权限才能修改该文件。

大多数知名的 CA 都已经是 cacerts 文件的一部分。由于您遇到异常,因此该文件中一定缺少 HTTPS 端点使用的 CA 证书。您需要从远程端点提取 CA 证书并将其添加到 cacerts 文件中。之后重新启动您的应用程序,它应该按预期工作。

如果您不想修改 cacerts 文件,也可以设置您自己的信任库。在此方法中,您创建一个包含您想要信任的证书的信任库,然后使用javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword属性将您的应用程序指向它。

答案2

问题是在我的安全文件夹 ( jre/lib/security) 中,其中的文件与其他不存在的文件的链接已损坏。

我进入Oracle主页,从Java 8 Linux下载一个JDK,并替换了security文件夹中的所有文件(但没有文件夹策略)。

相关内容