Java 具有SHA-2签名证书的SunCertPathBuilderException

Java 具有SHA-2签名证书的SunCertPathBuilderException,java,security,ssl,Java,Security,Ssl,我最近为一个网站获得了一个新证书,并按照建议使用SHA-2签名算法生成了它。在我尝试用Java(Java.net.URLConnection)与该网站建立安全连接之前,一切看起来都很好,这导致了 SunCertPathBuilderException: unable to find valid certification path to requested target 这通常发生在自签名证书上。只是这不是一个自签名证书,HTTPS请求在浏览器中运行良好 当我用SHA-1签名算法重新设置证书密

我最近为一个网站获得了一个新证书,并按照建议使用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在web浏览器中注册,但在Java的默认信任库(cacerts文件)中未注册。sha-1证书可能有效,因为它是由信任库中存在的较旧CA颁发的

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

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

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

    谢谢,这可能就是问题所在。不幸的是,我无法更新所有使用我的软件安全访问我的服务器的人的信任存储。啊,那么这是一个由其他java客户端访问的web服务?