【问题标题】:How do I import an existing Java keystore (.jks) file into a Java installation?如何将现有的 Java 密钥库 (.jks) 文件导入 Java 安装?
【发布时间】:2011-12-10 09:04:32
【问题描述】:

所以,我遇到了 LDAP 问题。我有一个集成测试用例,希望能成功,但它目前遇到了 SSL 握手的 LDAPS 安全问题。

我能够使用 Apache Directory Studio 连接到 LDAPS,并且它已将密钥库下载到文件“permanent.jks”中。

没关系,但我希望使用 JRE 驻留在 Eclipse 中的集成测试能够使用此密钥库连接到 LDAP 服务器。

如何获取此密钥库并将其导入 JRE 以供自己使用?

【问题讨论】:

    标签: java keystore jks


    【解决方案1】:

    好的,这就是我的过程:

    keytool -list -v -keystore permanent.jks - 给我取了别名。

    keytool -export -alias alias_name -file certificate_name -keystore permanent.jks - 让我获得要导入的证书。

    然后我可以使用 keytool 导入它:

    keytool -import -alias alias_name -file certificate_name -keystore keystore location

    正如@Christian Bongiorno 所说,别名不能存在于您的密钥库中。

    【讨论】:

    • 我得到了它的工作,但有一个修正(如果你想改变你的答案)。在导入过程中,您拥有“别名”的部分(顺便说一句:不是带有空格的好变量名),这必须是目标商店中尚不存在的别名。如果您不指定别名,则默认为“1”——您可以在安装前使用第 1 步列出目的地的别名
    • 在最后一步(导入)中,我收到了错误keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect,即使上一步(导出),我也可以使用密码成功完成。你知道为什么吗?
    • @ThaiTran 对于未来的读者,在导入证书时,请确保使用目标证书文件的密码,而不是一开始用于创建证书的密码。另请注意,在许多系统上,JDK 由 root 拥有。如果是这种情况,您需要以 root 身份执行 keytool -import 命令。
    • 对于其他收到 IOException 的未来读者,cacerts 的默认密码是“changeit”。
    • 好的,这确实有效。然而,我的“permanent.jks”包含 5 个不同的证书。因此,在 keytool -list -v -keystore Permanent.jks.. cmd + f "alias" 找到所有别名并一一导出它们之后。然后在 5 个单独的 .cer 文件之后,我能够将它们添加到 cacerts (也可以在此处的帮助之后再见)。谢谢!
    【解决方案2】:

    您可以将所有别名从一个密钥库批量导入到另一个:

    keytool -importkeystore -srckeystore source.jks -destkeystore dest.jks
    

    【讨论】:

      【解决方案3】:

      要加载 KeyStore,您需要告诉它它是密钥库的类型(可能是 jceks),提供输入流和密码。然后,您可以像这样加载它:

      KeyStore ks  = KeyStore.getInstance(TYPE_OF_KEYSTORE);
      ks.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD);
      

      这可能会抛出 KeyStoreException,因此您可以根据需要将其包围在 try 块中,或者重新抛出。请记住,一个密钥库可以包含多个密钥,因此您需要使用别名来查找您的密钥,这是一个使用对称密钥的示例:

      SecretKeyEntry entry = (KeyStore.SecretKeyEntry)ks.getEntry(SOME_ALIAS,new KeyStore.PasswordProtection(SOME_PASSWORD));
      SecretKey someKey = entry.getSecretKey();
      

      【讨论】:

      • 你救了我的命。在我来到您的示例之前,没有正确加载密钥库。可惜我不能给你10000分。非常感谢!!
      • 很高兴为您提供帮助!你的感谢比几分更有价值:)。
      • 嗨兄弟,你的代码用 SHA1RSA 写得很好,你能帮忙加载一个 KeyStore SHA256RSA,它说“无效的密钥库格式”。
      • KeyStore类型中的load(InputStream, char[])方法不适用于参数(FileInputStream, String)
      猜你喜欢
      • 2012-08-05
      • 2016-03-19
      • 1970-01-01
      • 2011-01-29
      • 2017-07-23
      • 2011-01-09
      • 1970-01-01
      • 2015-04-05
      • 2020-04-08
      相关资源
      最近更新 更多