我有一个关于java密钥库和keytool的问题。我假设一个密钥库可能有1个以上的证书。正如我已经尝试过的,通过keytool我可以创建一个密钥库,要访问这个密钥库,我必须设置一个密码。此外,要访问每个证书条目,我必须设置密码。密钥库和条目是否必须具有相同的密码?如果不是(我认为假设是合理的),为什么是下面的代码:
char[] pwd = new char[]{'s','e','c','r','e','t'};
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream("myPersonal.keystore"), pwd);
kmf.init(ks, pwd);//fails here with exception
给了我下面的异常?
Exception in thread "main" java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(Unknown Source)
at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(Unknown Source)
secret
是访问我通过密钥工具创建的密钥库myPersonal.keystore
的密码。其中有2个条目,对于证书,1个DSA和1个RSA。每个密钥库都有不同的密码(以及彼此)。现在代码是正确的,因为如果我使用具有与密钥库相同的密码的单个证书条目的密钥库,则没有异常,并且程序运行良好。
那么这里的问题是什么呢?我不应该有不同的密码?我不应该有很多证书?不然呢?
发布于 2011-02-07 23:46:51
正如API所指定的,KeyManagerFactory.init方法接受用于从密钥库中检索密钥的密码。因为只有一个password参数,所以它期望所有密钥的密码是相同的。如果其中一个密钥使用了不同的密码,那么您将看到错误,因为该特定密钥库条目的密码不正确。
对于您来说,最简单的解决方案是对keystore中的所有条目使用相同的密码。如果您设置为每个条目维护不同的密码,那么您可能需要考虑构建您自己的自定义安全元素,例如KeyManager。
https://stackoverflow.com/questions/4926290
复制