【问题标题】:Adding certificate to Java truststore and Sslhandshake将证书添加到 Java 信任库和 Sslhandshake
【发布时间】:2016-01-25 22:04:56
【问题描述】:

我使用 Java 程序(使用 HttpUrlConnection)向网站发送 http 请求并从那里下载文件。

网站是“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 高保证 CA-3

-thecompanycert(由 DigiCert High Assurance CA-3 颁发)

然后我用 keytool 检查了我的 trustsroe。信任库只有根 CA。 是否足够或者我必须导入其他 2 个证书?还是只有-thecompanycert?

将中间证书添加到 java 信任库有什么风险? 我必须这样做吗?

有人可以帮忙吗?

【问题讨论】:

  • 将完整的证书链导入到trustore

标签: java http ssl https certificate


【解决方案1】:

如果服务器配置正确,它应该发送站点证书以及构建信任链所需的任何/所有中间证书。您连接的站点似乎没有发送中间证书。

如果您是站点管理员,则可以更正此问题,而不必弄乱 Java 客户端信任库。

如果您是最终用户,则可以将中间证书添加到 Java 信任库。您不需要添加站点证书。但是,请联系网站所有者并要求他们更正此问题。

几天前我发布了similar answer

【讨论】:

  • 所以你告诉我,如果我只将 -DigiCert High Assurance CA-3 添加到我的信任库中,它会起作用吗?我已经有根 CA 并且在添加中间 (-DigiCert High Assurance CA-3 ) 到我的信任库中,我可以解决问题。不需要添加“-thecompanycert”(由 DigiCert High Assurance CA-3 颁发)。我说的对吗?
  • 正确,将中间体 (DigiCert High Assurance CA-3) 添加到您的商店应该可以解决您遇到的连接问题。
  • 好的,感谢您的回答,但是将中间证书添加到信任库有什么风险。这是唯一正确的方法吗?
  • 我遇到了同样的问题。我将包括站点、中间证书和根证书在内的完整证书链添加到服务器配置中。调试ssl流量表明提交完整链,但是java客户端仍然报错“未找到可信证书”。在信任库中,我确实必须根 CA 证书,但这似乎还不够。如果我也添加中间证书,则 SSL 连接成功。 (到目前为止我的观察)
【解决方案2】:

鉴于 CA 和中间 CA 已经存在于最新 Java 版本的默认信任库中,除非您使用的是较旧的 Java 版本,否则您不需要导入它们。无论如何,这取决于您对 CA 的信任程度,但 Java 和大多数浏览器已经信任它。

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2021-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多