gpt4 book ai didi

java - 我真的需要手动将 SSL 证书导入 Java keystore 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:12 26 4
gpt4 key购买 nike

我有一个 Java 网络应用程序已经运行了几个月。它集成了 Box API ( https://upload.box.com/api/2.0 ) 以将文件保存到云服务。出乎意料的是,在尝试对 Box Web 服务进行 REST API 调用时,我们开始收到可怕的 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 异常。

有很多帖子告诉您如何使用 keytool 实用程序将证书手动导入到您的 keystore 中。我知道我可以这样做来解决问题。但这真的是正确的解决方法吗?

事实上,我的应用程序几个月来一直运行良好,这让我相信了 https://upload.box.com 上的证书中的某些内容。变了。在我的网络浏览器中查看证书,该证书似乎有效并且仅在几周前更新。我的 keystore 中缺少什么?

我的 keystore 中是否缺少根 CA 证书?如果是这样,我可以只从较新版本的 Java 复制 cacerts 文件吗?我的应用程序当前正在运行 JDK 1.6.0_33。

我只是想了解为什么这会突然停止工作以及“真正的”修复应该是什么。修改 JDK keystore 似乎不是正确的做法。

最佳答案

我假设您在 4.2.6, 4.3 Beta2 之前使用 Apache HTTP Client 4.x , 在这种情况下 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated最有可能来自不受信任的证书(否则这意味着服务器没有发送证书,这是一个不同的问题,more details in this answer)。

您尝试访问的服务器的当前证书似乎是在 07/04/2014 颁发的,因此这表明该证书及其链可能最近确实发生了变化。

我手边没有 JDK 1.6.0_33,但其中一些 CA 证书可能不在默认包中。无论如何,都值得更新 cacerts ,甚至在较旧的 JRE 上(例如,如果只是为了删除不再受信任的 CA 证书)。 JSSE Reference Guide明确指出(诚然在相当长的文档中间,但值得搜索“重要说明”...):

IMPORTANT NOTE: The JDK ships with a limited number of trusted root certificates in the <java-home>/lib/security/cacerts file. As documented in keytool, it is your responsibility to maintain (that is, add/remove) the certificates contained in this file if you use this file as a truststore.

Depending on the certificate configuration of the servers you contact, you may need to add additional root certificate(s). Obtain the needed specific root certificate(s) from the appropriate vendor.

如果您无法升级 JRE(通常不支持 Java 6),请更新 cacerts来自更新版本的文件当然是一个明智的妥协。

除了 Java 7 中的各种修复之外,Java 7+ 还允许您连接到需要 SNI 的主机(尽管对于该特定主机而言似乎并非如此)。

关于java - 我真的需要手动将 SSL 证书导入 Java keystore 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23920772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com