gpt4 book ai didi

java - 带有 SHA-2 签名证书的 SunCertPathBuilderException

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:43 25 4
gpt4 key购买 nike

我最近获得了一个网站的新证书,并按照建议使用 SHA-2 签名算法生成了它。一切看起来都很好,直到我尝试用 Java (java.net.URLConnection) 建立到该网站的安全连接,这导致了一个

SunCertPathBuilderException: unable to find valid certification path to requested target

这通常发生在自签名证书上。只是这不是自签名证书,HTTPS 请求在浏览器中运行良好。

当我使用 SHA-1 签名算法重新加密证书时,问题就消失了。

为什么我不能将 SHA-2 签名证书与最新的 JDK (1.7.0_45) 一起使用?我可以做些什么让 JDK 接受 SHA-2 签名证书吗?

最佳答案

我们在 java 中大量使用 sha-2 证书,所以我很确定问题不是 sha-2 本身,而是颁发它的 CA。

很可能因为它是 sha-2 证书,所以它是由更新的 sha-2 CA 颁发的,该 CA 在网络浏览器中注册但没有在 Java 的默认信任库(cacerts 文件)中。 sha-1 证书可能有效,因为它是由信任库中存在的旧 CA 颁发的。

您需要导出颁发 sha-2 网站证书的 CA 证书并将其导入到您的 java 信任库中。如果您将 url 放入网络浏览器中,您应该能够单击锁定图标并查看整个链。 CA 证书位于顶部。

  1. 获取 base64 格式的 CA 证书作为 ca.cer(如果您需要,我可以发布确切的步骤)。请注意,keytool 要求证书采用 base64 格式,否则它将拒绝它。
  2. 运行此命令(将 JAVA_HOME 替换为您的 JDK 路径):JAVA_HOME\bin\keytool -keystore JAVA_HOME\jre\lib\security\cacerts -import -file ca.cer -alias newca
  3. 系统将提示您输入密码,键入不带引号的“changeit”
  4. 系统会询问您“信任此证书吗?[否]”,键入"is"

现在 java.net.URLConnection 应该可以工作了。我们经常遇到这个问题,如果 Oracle 发布 cacerts 文件的更新就好了。

关于java - 带有 SHA-2 签名证书的 SunCertPathBuilderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com