【问题标题】:java.io.IOException: exception unwrapping private key - java.security.InvalidKeyException: pad block corruptedjava.io.IOException:异常解包私钥 - java.security.InvalidKeyException:垫块损坏
【发布时间】:2015-06-27 15:18:28
【问题描述】:

我正在尝试通过 SSL(自签名 SSL)将 android 应用程序连接到 IIS 下的 XML Web 服务。我遵循了以下程序:

  1. 在 IIS 管理器下创建自签名证书
  2. 将该证书导出为 pfx 文件
  3. 然后将 pfx 转换为 (java keystore) jks(PKCS12 格式),如下所述
  4. 将 jks 作为原始数据嵌入到 Android 应用中
  5. 读取jks文件内容如下

将 pfx 转换为 jks

keytool -importkeystore -srckeystore cert.pfx -srcstoretype pkcs12 
-destkeystore cert.jks -deststoretype pkcs12

阅读jks的内容

KeyStore keyStore = KeyStore.getInstance("pkcs12");
InputStream in = _context.getResources().openRawResource(R.raw.cert);
try
{
    keyStore.load(in, "123456".toCharArray());
    mgrFact.init(keyStore, "123456".toCharArray());
}
catch (Throwable t)
{
    logger.error(t.getMessage());
}
finally
{
    in.close();
}

现在keyStore.load 抛出以下异常

java.io.IOException: exception unwrapping private key 
-java.security.InvalidKeyException: pad block corrupted

我可能在哪里犯了错误?

其实我是按照here所描述的来做的

谢谢

【问题讨论】:

  • PKCS#12 为什么要调用目标密钥库 .jks?这只会导致混乱。
  • 你解决了这个问题吗?

标签: java android ssl self-signed


【解决方案1】:

我知道这个问题已经 4 年了,但以防其他人遇到同样的错误:

我不知道为什么,但是使用 OpenJDK 11 的 keytool 生成的密钥库与使用 Oracle JDK 8 的 keytool 生成的密钥库(具有相同的证书/密钥/密码)之间似乎存在差异。

我的问题是使用keystore-jdk11.p12 下的

  • Tomcat 8.5
  • Oracle JVM 8 (u241)

我解决了这个问题,只需使用 Oracle JDK 8 的 keytool 重新导入使用 OpenJDK 11 生成的密钥库的内容,使用

/path/of/jdk8.241/bin/keytool \
   -importkeystore \
   -srckeystore keystore-jdk11.p12 \
   -destkeystore keystore-jdk8.p12 \
   -deststoretype pkcs12

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2017-03-17
    相关资源
    最近更新 更多