java keystore and password settings
我在Java密钥库和密钥工具上有以下问题。我假设一个密钥库可能有一个以上的证书。正如我所尝试的,通过keytool,我可以创建一个密钥库,要访问这个密钥库,我必须设置一个密码。另外,要访问每个证书条目,我必须设置密码。对于密钥存储库和条目是否必须具有相同的密码?如果没有(我认为这样做是合理的),为什么要使用以下代码:
1 2 3 4 | 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 |
给我以下例外情况?
1 2 3 4 5 | 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) |
号
那么这里的问题是什么呢?我不应该有不同的密码?我不应该有很多证书?或者什么?
按照API的指定,keymanagerFactory.init方法接受用于从密钥库检索密钥的密码。因为只有一个密码参数,所以所有密钥的密码都是相同的。如果其中一个密钥使用了不同的密码,则会出现错误,因为该密码对于特定的密钥库条目不正确。
最简单的解决方案是对密钥库中的所有条目使用相同的密码。如果设置为维护每个条目的不同密码,则可能需要构建自己的自定义安全元素,例如keymanager。