如何将现有Java密钥库(.jks)文件导入Java安装?

Met*_*002 35 java keystore jks

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

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

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

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

Met*_*002 44

好的,所以这是我的过程:

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所说,别名不能存在于您的密钥库中.

  • 我得到了它的工作,但有修改(如果你想改变你的答案).在导入过程中,您具有"别名"的部分(BTW:不是带有空格的变量名称)这必须是目标存储中尚不存在的别名.如果未指定别名,则默认为"1" - 您可以在安装之前使用步骤1列出目标中的别名 (3认同)
  • 在最后一步(导入),我得到错误`keytool错误:java.io.IOException:密钥库被篡改,或密码不正确`即使上一步(导出),我也可以成功完成我的密码.你知道为什么吗? (2认同)

qwe*_*guy 29

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

keytool -importkeystore -srckeystore source.jks -destkeystore dest.jks
Run Code Online (Sandbox Code Playgroud)


Pau*_*ald 26

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

KeyStore ks  = KeyStore.getInstance(TYPE_OF_KEYSTORE);
ks.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD);
Run Code Online (Sandbox Code Playgroud)

这可能会引发KeyStoreException,因此如果您愿意,可以将其包围在try块中,或者重新抛出.请记住,密钥库可以包含多个密钥,因此您需要使用别名查找密钥,这是带有对称密钥的示例:

SecretKeyEntry entry = (KeyStore.SecretKeyEntry)ks.getEntry(SOME_ALIAS,new KeyStore.PasswordProtection(SOME_PASSWORD));
SecretKey someKey = entry.getSecretKey();
Run Code Online (Sandbox Code Playgroud)