将证书添加到Java信任库和Sslhandshake
我将带有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高保证EV根CA.
-DigiCert High Assurance CA-3
-companycert(由DigiCert High Assurance CA-3发布)
我用keytool检查我的trustsroe。 信任库仅具有根CA. 是否足够或我必须导入另外2个证书? 或者只是 – 公司?
将中间证书添加到java信任库有什么风险? 我必须这样做吗?
任何人都可以帮忙吗?
如果服务器配置正确,则应发送站点证书以及构建信任链所需的任何/所有中间证书。 您连接的站点似乎没有发送中间证书。
如果您是站点管理员,则可以更正此问题,而不必使用Java客户端信任库。
如果您是最终用户,则可以将中间证书添加到Java信任库。 您不需要添加站点证书。 但是,请与网站所有者联系并请求他们更正此问题。
我几天前发布了类似的答案 。
鉴于CA和中间CA已存在于最近Java版本的默认信任库中,除非使用较旧的Java版本,否则不需要导入它们。 在任何情况下,它取决于您对CA的信任程度,但Java和大多数浏览器已经信任它。