【问题标题】:KeyStore get key without passwordKeyStore 获取没有密码的密钥
【发布时间】:2012-03-18 12:31:36
【问题描述】:

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

但是,当我尝试在没有密码的情况下获取密钥时,我得到 "java.lang.IllegalArgumentException: password can't be 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);

这会引发以下异常

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”的意义,每个人都可以看到它,因此使密码无用。

【问题讨论】:

    标签: java keystore keytool


    【解决方案1】:

    如果未提供storepass(用于访问私钥),那么它将尝试使用keypass,即您也未提供的密钥库密码。
    这就是你得到异常的原因。
    您不能同时拥有keypassstorepass null
    从您的链接:

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

    【讨论】:

    • 是的,看来我确实误解了文档。那么有没有推荐的方法来解决这个问题?我只是不能在代码中使用这样的密码。谢谢
    • 所以你的问题是避免代码中的硬编码密码?这是最常见的问题。你真的无能为力。一般推荐的方法是向用户请求密码.如果你不能这样做,你可以做一些复杂的事情,例如加密密码,但这不会真正让你得到太多。你也可以将责任委托给用户,即保持文件系统的安全。
    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多