我需要知道是否可以从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'的意思,每个人都可以看到它,因此密码无用。
答案 0 :(得分:6)
如果未提供storepass
(用于访问私钥),则会尝试使用keypass
即密钥库密码,您也不提供该密码。
这就是你得到例外的原因
您不能 keypass
和storepass
null
从您的链接:
对于-keypass选项,如果未在命令中指定选项 行,keytool将首先尝试使用密钥库密码 恢复私钥/密钥,如果失败,则会提示 您使用私人/密钥密码