Nis*_*ant 5 java keystore keytool
我需要知道是否可以从KeyStore检索密钥而不提供'storepass'.此处的文档说"当从密钥库中检索信息时,密码是可选的;如果没有给出密码,则无法检查检索到的信息的完整性并显示警告"
但是,当我尝试在没有密码的情况下获取密钥时,我得到"java.lang.IllegalArgumentException:password not not null"异常.
以下是我创建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);
Run Code Online (Sandbox Code Playgroud)
这引发了以下异常
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)
Run Code Online (Sandbox Code Playgroud)
我完全误解了文档吗?有没有其他办法解决这个问题,因为我没有看到在我的代码中将'storepass'清楚地存储在每个人都可以看到它的位置,因此使密码无用.
如果storepass没有提供(用于访问私钥),那么它将尝试使用keypass即密钥库密码,您也不提供密码.
这就是你得到例外的原因.
你不能既在keypass和storepass空
从你的链接:
对于-keypass选项,如果未在命令行上指定该选项,则keytool将首先尝试使用密钥库密码来恢复私钥/密钥,如果失败,则会提示您输入私钥/密钥密码