KeyStore获取没有密码的密钥

时间:2012-03-18 12:31:36

标签: java keystore keytool

我需要知道是否可以从KeyStore检索密钥而不提供'storepass'。文档here 表示“从密钥库中检索信息时,密码是可选的;如果没有给出密码,则无法检查检索到的信息的完整性并显示警告”

但是当我尝试在没有密码的情况下获取密钥时,我得到“java.lang.IllegalArgumentException:password不能为空”异常。

以下是我创建KeyStore的方法

  

keytool -genseckey -alias“myKey”-keystore KEYSTORE.jks -storepass“password”-storetype“JCEKS”-keyalg AES -keysize 128

我试图按如下方式检索它

final KeyStore keyStore = KeyStore.getInstance("JCEKS");
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")), 
  null);
final Key key = keyStore.getKey("myKey", null);

引发以下异常

java.lang.IllegalArgumentException: password can't be null
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..)
at java.security.KeyStore.getKey(KeyStore.java:763)

我是否完全误解了文档?有没有其他办法解决这个问题,因为我没有看到在我的代码中清楚地存储'storepass'的意思,每个人都可以看到它,因此密码无用。

1 个答案:

答案 0 :(得分:6)

如果未提供storepass(用于访问私钥),则会尝试使用keypass即密钥库密码,您也不提供该密码。
这就是你得到例外的原因 您不能 keypassstorepass null 从您的链接:

  

对于-keypass选项,如果未在命令中指定选项   行,keytool将首先尝试使用密钥库密码   恢复私钥/密钥,如果失败,则会提示   您使用私人/密钥密码