【问题标题】:SunCertPathBuilderException with SHA-2 signed certificate带有 SHA-2 签名证书的 SunCertPathBuilderException
【发布时间】:2014-01-15 02:10:19
【问题描述】:

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

SunCertPathBuilderException: unable to find valid certification path to requested target

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

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

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

【问题讨论】:

    标签: java security ssl


    【解决方案1】:

    我们在 java 中使用了相当多的 sha-2 证书,所以我很确定问题不是 sha-2 本身,而是发出它的 CA。

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

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

    1. 以 ca.cer 格式获取 base64 格式的 CA 证书(如果您需要,我可以发布确切的步骤)。请注意,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. 系统会询问您“信任此证书吗?[否]”输入“是”

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

    【讨论】:

    • 谢谢,这很可能是问题所在。不幸的是,我无法更新所有使用我的软件以安全访问我的服务器的人的信任库。
    • 啊,这么说是其他java客户端访问的web服务?
    猜你喜欢
    • 2020-09-03
    • 2014-05-05
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多