我将带有Java程序的http请求(使用HttpUrlConnection)发送到网站并从那里下载文件。
该网站为“https”并使用证书。
当我尝试运行我的代码时,它会例外:
cause javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我尝试使用我的浏览器(Mozilla)访问此网站。当我检查证书时,有三个证书。网站包含这些证书。
DigiCert High Assurance EV Root CA
-DigiCert High Assurance CA-3
-thecompanycert(由DigiCert High Assurance CA-3发布)
我用keytool检查我的trustsroe。信任库仅具有根CA. 是否足够或我必须导入另外2个证书?或者只是 - thecompanycert?
将中间证书添加到java信任库有什么风险? 我必须这样做吗?
任何人都可以帮忙吗?
答案 0 :(得分:1)
如果服务器配置正确,它应该发送站点证书以及构建信任链所需的任何/所有中间证书。您连接的网站似乎没有发送中间证书。
如果您是网站管理员,则可以更正此问题,而且您不必使用Java客户端信任存储区。
如果您是最终用户,则可以将中间证书添加到Java信任库。您不需要添加站点证书。但是,请与网站所有者联系并请求他们更正此内容。
我几天前发布了similar answer。
答案 1 :(得分:0)
鉴于CA和中间CA已存在于最近Java版本的默认信任库中,除非您使用较旧的Java版本,否则不应导入它们。在任何情况下,它取决于您对CA的信任程度,但Java和大多数浏览器已经信任它。