【问题标题】:JKS with multiple keys (different passwords)具有多个密钥(不同密码)的 JKS
【发布时间】:2018-06-19 09:52:16
【问题描述】:

我有一个使用 keytool 生成的带有 2 个密钥的 JKS。 2 个密钥具有不同的密码,而 JKS 密码又与这 2 个密码不同。

如果密钥库中只有一个密钥,它会按预期工作。但是使用不同的密码添加另一个会导致UnrecoverableKeyException。如果两个密钥具有相同的密码,它仍然可以正常工作。

查看与此相关的一些问题:Java keystore with multiple keys and different passwordsCaused by: java.security.UnrecoverableKeyException: Cannot recover key 似乎解决方案是使用相同的密码。但这意味着为不同的密钥设置不同的密码是没有意义的。我们可以为整个密钥库设置一个密码并保留它。

查看Tomcat,它似乎也遵循这种方法,即为商店和密钥使用相同的密码。

这是 JDK 施加的限制吗?有没有办法让不同的密钥使用不同的密码?

【问题讨论】:

  • JDK 允许不同的密码;这就是为什么(以及如何)keytool 可以创建它。 Tomcat 低于 8.5 没有。使用不同密码的方法是使用Tomcat以外的一些网络服务器,或者使用配置了多个(显式)SSLHostCertificate项的Tomcat 8.5 up。注意 Tomcat 6 一年多前正式死亡。
  • 啊抱歉,我什至没有意识到我正在查看旧版本。该链接在我提到的其中一个问题的讨论中。

标签: java tomcat ssl keystore jks


【解决方案1】:

这不是 JDK 的限制,JSSE Reference Guide 回答了你的问题:

对于很多工厂,比如默认的 SunX509 KeyManagerFactory 来自 SunJSSE 提供程序、KeyStore 和密码是唯一的 初始化 KeyManagerFactory 所需的信息,因此 第一个 init 方法是合适的调用方法。这 KeyManagerFactory 将查询 KeyStore 以获取有关哪个 私钥和匹配的公钥证书应该用于 向远程套接字对等方进行身份验证。密码参数 指定将与方法一起使用的密码 从 KeyStore 访问密钥。 KeyStore 中的所有密钥都必须是 由相同的密码保护。

有时初始化参数不是 KeyStore 和密码 供应商需要。该提供商的用户应通过 适当的 ManagerFactoryParameters 的实现为 由提供者定义。然后提供者可以调用指定的 ManagerFactoryParameters 实现中的方法来获取 需要的信息。

您现在知道该做什么了,实现您自己的 ManagerFactoryParameters。但是如果你还要修改Tomcat的代码,那就另当别论了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2015-10-07
    • 2014-11-20
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多