【发布时间】: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