繁体   English   中英

使用新证书更新 Java 密钥库和信任库

[英]Updating Java Keystore and Truststores with new Certificates

我们有一个使用双向 TLSv1.2 验证的远程 Java 客户端应用程序。 这意味着服务器向客户端进行身份验证,然后客户端向服务器进行身份验证。

这是使用包含来自证书签名机构的签名证书的 .jks 文件并使用 SSLSocketFactory 来实现的。

是否可以在当前证书旁边的相同密钥库和信任库中添加新证书(来自同一机构)?

当前证书过期后,Java 会“故障转移”到新证书吗?

如果是这样,这将允许我们批量推出新的密钥/信任库,而不必在单个企业范围的部署中替换服务器端和客户端的所有证书。

例如,我们可以使用包含当前和新证书链的新存储更新服务器端。 然后,我们可以在几天内将存储扩展部署到包含新证书链的客户端。

一些客户端与当前链握手,一些客户端与新链握手。

SSL 实现是否足够智能以尝试商店中可用的所有链和/或在当前证书链到期的那一天,Java 是否会“故障转移”以使用新的证书链?

下次我们需要用新链更新商店时,我们可以从商店中删除过期的链。

可以做您想做的事,但这需要您或维护您的 Java 客户端的任何人对其进行编程。 存储您的密钥的密钥库显然可以包含您希望它包含的尽可能多的密钥对。 当服务器和您的客户端之间协商 TLS 时,服务器可以发送它可以接受的证书颁发机构的 DN 列表。 然后您的客户决定从您的密钥库中选择哪一个。 默认的 Java 实现会检查服务器发送的 DN 列表,并检查它们是否与客户端密钥库中证书上的颁发者 DN 匹配。 当找到匹配的证书时,选择将其发送到服务器进行身份验证。 如果两个证书匹配,则优先选择未过期的证书。 有关更多详细信息,请参阅JDK-8132108 现在,这是默认行为。 如果你想要更多的控制,你需要实现你自己的 X509KeyManager 并实现你想要的客户端证书选择的任何逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM