我最近获得了一个新网站的证书,并按照建议使用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签名证书吗?
答案 0 :(得分:1)
我们在java中使用sha-2证书相当多,所以我很确定sha-2本身不是问题,而是发布它的CA.
可能因为它是sha-2证书,它是从较新的sha-2 CA发布的,该CA已在Web浏览器中注册,但在Java的默认信任库(cacerts文件)中不。 sha-1证书可能有效,因为它是从较旧的CA颁发的, 存在于信任库中。
您需要导出颁发sha-2网站证书的CA证书并将其导入您的java信任库。如果您将网址放入网络浏览器,您应该可以点击锁定图标并查看整个链条。 CA证书就是顶级证书。
现在java.net.URLConnection应该可行。我们会遇到这个问题,如果Oracle会发布cacerts文件的更新,那就太好了。