首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyStore.load不工作,但KeyStore.getkey使用相同的密码

KeyStore.load不工作,但KeyStore.getkey使用相同的密码
EN

Stack Overflow用户
提问于 2019-05-15 08:03:46
回答 1查看 947关注 0票数 3

使用java Keystore类。

代码语言:javascript
复制
 InputStream keystoreStream = new FileInputStream(strKeystorePath); 
 KeyStore keystore = KeyStore.getInstance("JCEKS"); 
 keystore.load(keystoreStream, strTrustStorePwd.toCharArray()); 
 Key key = keystore.getKey(strAliasName, strTrustStorePwd.toCharArray());

load()方法正在抛出keytool错误:

java.io.IOException: Keystore被篡改了,或者密码不正确。

但是什么时候:使用

代码语言:javascript
复制
InputStream keystoreStream = new FileInputStream(strKeystorePath); 
KeyStore keystore = KeyStore.getInstance("JCEKS"); 
keystore.load(keystoreStream, null); 
Key key = keystore.getKey(strAliasName, strTrustStorePwd.toCharArray());

它很好用。请确保loadgetKey方法使用相同的密码。

load()getKey方法与密码一起使用时,load()方法会抛出错误,但是当load()null密码一起使用时,当getKey使用相同的密码时,它就工作了。

EN

回答 1

Stack Overflow用户

发布于 2019-05-15 10:04:15

JCEKS和JKS一样,使用存储级密码(仅用于完整性检查) --检查整个存储;如果调用.load(instream,null),它不检查完整性,但仍然加载内容--或者尝试:如果数据实际上已被篡改或损坏,负载可能会以多种方式失败,或者看起来会失败,但随后会导致其他问题;但是如果数据是正确的,它就会加载。(注意,这并不一定适用于其他密钥库类型,如PKCS11)。

JCEKS或JKS中的证书都是未加密的,无需任何(进一步的)密码即可访问。私钥(如果有的话)是单独加密的,对于访问私钥,您需要提供正确的密钥级密码,这可以是相同的存储密码,也可以是不同的。使密钥密码与存储密码相同通常较不容易混淆,而较少的混淆通常是可取的,但并不是必需的。

显然,您有一个JCEKS,其存储密码与您所知道的值不同,但包含一个密码与该值匹配的密钥。如果您想改变这一点,在.load(instream,null).store(outstream,desiredpassword)重写它之后。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56144337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档