在Java桌面应用程序中,我需要连接到SSL URL。尝试时,出现异常:
SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到请求目标的有效证书路径
为了解决这个问题,我用浏览器转到该地址,将证书下载到.cert文件中,然后使用keytool命令导入到我的java cacerts keystore中。之后,该应用程序运行正常。
我的问题是:如果用VeriSign签名,为什么Java无法识别证书?默认情况下,cacerts密钥库中未安装VeriSign证书吗?
也许我不明白SSL是如何工作的。浏览器和Java桌面行为之间有什么区别?我可以使用浏览器连接到该URL,而无需进行任何安装。
谢谢
最佳答案
当我们访问使用SSL提供身份和加密的安全站点时,它会提供由受信任的第三方站点(如verisign,godaddy或thwate)验证的证书。
通过使用证书,浏览器或Java客户端知道它们正在与正确的站点(声称是该站点)进行通信,而不是在重定向的代理站点上进行通信。如果您使用浏览器访问网站,则此步骤非常透明,因为如果证书不在浏览器的受信任存储区中,它将要求您添加该证书,然后将其添加。
但是,当您使用Java程序访问安全站点时,证书握手的这一步骤对用户而言并不透明,并且证书已通过JRE的trustStore进行了验证。
了解更多:http://javarevisited.blogspot.com/2012/03/add-list-certficates-java-keystore.html#ixzz32v1wL3Gl