我对java密钥库和keytool有以下问题。我假设密钥库可能有多个证书。正如我已经试过,通过keytool我可以创建一个密钥库,并且要访问这个密钥库,我必须设置一个密码。同样要访问每个证书条目,我必须设置密码。是否必须为密钥库和条目使用相同的密码?如果没有(我认为这是合理的假设)为什么是以下代码:java密钥库和密码设置
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。每个密钥都与密钥库(以及相互之间)有不同的密码。现在代码是正确的,因为如果我使用一个具有与密钥库相同密码的证书条目的密钥库,则没有例外,程序运行良好。
那么这里有什么问题?我不应该有不同的密码?我不应该有很多证书?或者是什么?
所以你说这是一个隐含的需求?是否有任何理由在KeyManagerFactory中强制实施此限制?我假设在真实场景中常见的情况是使用不同的密码 – Cratylus 2011-02-08 08:06:43