【问题标题】:Not able to access Private key from PKCS12 file using java无法使用 java 从 PKCS12 文件访问私钥
【发布时间】:2015-05-09 22:41:06
【问题描述】:

我创建了一个 pkcs12 文件,其中包含一个没有任何密码的私钥条目。 我无需提供任何密码即可使用 keytool 实用程序访问 p12 文件。

同样,我无法以编程方式进行。 当我像下面这样尝试时

if( keyStore.isKeyEntry(KEYSTORE_ALIAS)) {
    key = (PrivateKey) keyStore.getKey(KEYSTORE_ALIAS,new char[0]);
}

我收到以下异常

Caused by: javax.crypto.BadPaddingException: Given final block not
properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
    at com.sun.crypto.provider.PKCS12PBECipherCore.implDoFinal(PKCS12PBECipherCore.java:355)
    at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(PKCS12PBECipherCore.java:387)
    at javax.crypto.Cipher.doFinal(Cipher.java:2087)
    at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:266)
    ... 2 more

【问题讨论】:

  • Java keytool 程序不允许您创建 KeyStore,除非您输入长度为 6 个或更多字符的密码。你是如何生成你的私钥的?
  • 重新格式化堆栈跟踪以避免换行。

标签: java keystore keytool jks


【解决方案1】:
key = (PrivateKey) keyStore.getKey(KEYSTORE_ALIAS,new char[0]);

这不是不指定密钥的正确方法。在这里,您要指定一个零长度的密钥。这不是一回事。试试这个:

key = (PrivateKey) keyStore.getKey(KEYSTORE_ALIAS, null);

【讨论】: