将证书添加到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和大多数浏览器已经信任它。