【问题标题】:Where the KeyStore password and key password storedKeyStore 密码和密钥密码的存储位置
【发布时间】:2019-08-11 03:10:19
【问题描述】:

我使用 windows 和 linux 机器通过 java keytool 创建 java keystore (JKS)。当我运行下面提到的 keytool 命令时:

keytool -genkey -alias TESTSSL -dname "cn=Test.com, ou=testlab, o=myorg, c=UK" -keyalg "RSA" -keysize 2048 -keystore TESTSSL.private.jks -validity 10 -storepass XXXXXXX

提示输入keystore密码和key密码。

查询是,我想知道两个密码的存储位置和形式。它是存储在密钥库文件中还是存储在操作系统中的其他位置(如果是这种情况,请知道确切位置)。

高度赞赏与此相关的任何信息。

【问题讨论】:

    标签: ssl ssl-certificate keystore keytool jks


    【解决方案1】:

    请注意,您实际上是在创建密钥库的 默认 格式,假设在您运行 keytool 时该文件不存在;通过 Java 8,默认是 JKS,但从 9 开始,它是 PKCS12。 (将文件命名为 something.jks 并不能控制格式,正如将其命名为 something.lollipop 会使它成为孩子的甜头。)

    如果您在命令行中指定-storepass whatever,如您所说,它不应提示输入密钥库密码——至少在该操作中不会;如果您再次运行keytool 以(重新)使用同一个文件,that 将提示您,除非您再次在 that 命令行中指定它。同样,如果在命令行中指定-keypass whatever,根据操作需要时,不提示输入密钥密码。

    对于 JKS JCEKS 和 PKCS12,根本不存储密码。这样做非常不安全。相反,密码加上“salt”(一个随机值)由单向“密钥派生”算法处理,以创建用于加密至少私钥条目的 key(s)在密钥库中,并验证 (MAC) 整个密钥库。在 Java 中实现的 PKCS12(弱)加密证书和私钥; JKS 和 JCEKS 没有。在 Java 中实现的 PKCS12 可能不支持不同于存储密码的私钥密码。

    如果您在使用密钥库文件时不能或不提供正确的密码,它可能会失败,具体取决于您尝试执行的操作,所以它是您的工作是记住它们,并在必要时转移或分发它们。如果您需要在难以手动管理的规模上执行此操作,则可以使用多种密码管理工具 - 可以处理所有事物的密码,而不仅仅是 Java 密钥库 - 种类繁多且来源众多。

    对于非基于文件的密钥库,如某些系统上的 PKCS11 或 Windows 上操作系统提供的存储,密码的实现和使用方式(如果有的话)取决于该密钥库的细节,尽管存储密码通常是不好的做法。

    【讨论】:

      【解决方案2】:

      密钥密码和密钥库密码存储在密钥库本身中。它是独立的。这样,密钥库是可移植的,并且可以发送给可以打开它的其他人(前提是他们知道密钥[存储]密码)。

      【讨论】:

        猜你喜欢
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 2015-10-19
        • 2023-02-10
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多