【问题标题】:Java 8 No trusted certificate found on HTTPS requestsJava 8 在 HTTPS 请求中找不到受信任的证书
【发布时间】:2021-11-10 12:26:33
【问题描述】:

我在 linux 上,我需要使用特定版本的 java 8 (1.8.0_162) 也不能使用 OpenJDK。

但是,当我尝试在任何 HTTPS url

上从我的 java 程序连接/获取/下载/任何内容时出现此错误

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

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

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

编辑:在我的 lib/security 文件夹中,我有很多断开的链接...可能是这个原因吗?我在哪里可以得到这些文件?

有一张我的安全文件夹的图片。带有 X 的那些是断开的链接。我应该换哪个?

【问题讨论】:

  • 好吧,您可以检查您尝试访问的 url 的根证书,并检查它们在该版本的 JDK 发布时是否已经存在(似乎是 2018 年 1 月 16 日)以及什么键他们正在使用的类型。我曾经遇到过类似的问题,因为 JDK 无法处理 4096 位密钥。您也可以尝试直接将证书添加到cacerts 以检查它是否有效。你可能想检查一下你的cacerts 的内容以及它是否被使用过。
  • 它不在特定站点上。每个使用 https 的 url 都会给我错误。 (像 maven central,pe)
  • 可能是这种情况,但如果你想排除它们,你需要测试和检查一些事情。您没有共享任何代码,并且无论如何声明相同的代码在生产中有效,因此您需要查看您也没有共享的配置。因此,我们所能做的就是指出您要检查的几件事,例如您的 cacerts 是否实际上包含一个失败的 URL 的有效根证书或中间证书(如果不是,这至少是问题的一部分)。
  • “它不在特定站点上。每个使用 https 的 url 都会给我错误。” - 这让我想起了那个老笑话:“医生,当我触摸这里时会痛,当我触摸这里时会痛……” - “嗯,你的手指断了”。 ;)
  • @dragonalvaro cacerts.original 不被 Java 使用,它很可能是由其他试图管理您的证书的东西制作的备份文件。为安全起见,您应该查看该文件的内容,但很可能将其重命名为 cacerts 可以解决您的问题。

标签: java linux http certificate ssl-certificate


【解决方案1】:

好的,我刚刚找到了问题和解决方案。

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

我去了oracle主页,从java 8 linux下载了一个jdk,把security文件夹里面的所有文件都替换掉了(但是没有文件夹策略)。

【讨论】:

  • 感谢@dave_thompson_085 为我指明了正确的方向。并感谢所有回答的人。
【解决方案2】:

文件夹 %JAVA_JRE_HOME%/lib/security 中有一个名为“cacerts”的文件。 这是您的 java 运行时环境的信任库。 使用“KeyStore Explorer”(或任何其他密钥库程序)打开文件(密码“changeit”)并将证书添加到信任。

【讨论】:

  • 它不在特定站点上。每个使用 https 的 url 都会给我错误。 (像 maven central,pe)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 2011-04-14
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
相关资源
最近更新 更多