java 安全库_关于安全性:java密钥库和密码设置

我在Java密钥库和密钥工具上有以下问题。我假设一个密钥库可能有一个以上的证书。正如我所尝试的,通过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是访问我通过keytool创建的keystore myPersonal.keystore的密码。其中有2个条目,用于证书、1个DSA和1个RSA。每个密钥库都有不同的密码(以及彼此)。现在代码是正确的,因为如果我使用一个具有与密钥库相同密码的单个证书条目的密钥库,就没有异常,并且程序运行良好。

那么这里的问题是什么呢?我不应该有不同的密码?我不应该有很多证书?或者什么?

按照API的指定,keymanagerFactory.init方法接受用于从密钥库检索密钥的密码。因为只有一个密码参数,所以所有密钥的密码都是相同的。如果其中一个密钥使用了不同的密码,则会出现错误,因为该密码对于特定的密钥库条目不正确。

最简单的解决方案是对密钥库中的所有条目使用相同的密码。如果设置为维护每个条目的不同密码,则可能需要构建自己的自定义安全元素,例如keymanager。

所以你是说这是一个隐含的要求?是否有任何理由在KeyManagerFactory中强制执行此限制?我假设在真实的场景中,常见的情况是使用不同的密码

对于keymanagerFactory的API定义,它是隐式的。我假设API是为处理最简单的场景而创建的,即所有密钥都具有相同的密码。keymanagerFactory是一个简单的机制,它涵盖了可能使用的更常见的方法(我尚未验证)。keystore api允许您使用不同的密码访问不同的密钥,这允许您为更复杂的场景扩展功能。关于API定义背后的推理…很难说。

它起作用了。感谢你的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值