代码之家  ›  专栏  ›  技术社区  ›  Pubudu

具有多个密钥(不同密码)的JKS

  •  1
  • Pubudu  · 技术社区  · 7 年前

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

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

    看看与此相关的一些问题: Java keystore with multiple keys and different passwords , Caused by: java.security.UnrecoverableKeyException: Cannot recover key 解决方案似乎是使用相同的密码。但这意味着不能为不同的密钥设置不同的密码;我们只需为整个密钥存储设置一个密码,然后就可以了。

    正在查看 Tomcat ,它似乎也遵循这种方法,即对存储区和密钥使用相同的密码。

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   Eugène Adell    7 年前

    这不是JDK的限制 JSSE Reference Guide 回答您的问题:

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

    有时初始化参数不是密钥库和密码 提供程序需要。该提供程序的用户应通过 适当的ManagerFactoryParameters的实现如下 由提供程序定义。然后,提供程序可以调用指定的 方法以获取 所需信息。

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