java.io.IOException:异常解包私钥 - java.security.InvalidKeyException:pad block corrupted

时间:2015-06-27 15:18:28

标签: java android ssl self-signed

我正在尝试将IIS应用程序连接到IIS over SSL(自签名SSL)下的XML Web服务。我按照以下程序进行了操作:

  1. 在IIS管理器下创建自签名证书
  2. 将该证书导出为pfx文件
  3. 然后将pfx转换为(java keystore)jks(PKCS12格式),详情如下
  4. 将jks作为原始数据嵌入Android应用程序
  5. 并按如下方式阅读jks文件的内容
  6. 将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

    所描述的内容

    由于

1 个答案:

答案 0 :(得分:0)

我知道这个问题已有4年的历史了,但是以防万一其他人遇到相同的错误:我不知道为什么,但是用OpenJDK 11的keytool生成的密钥库和一个密钥库似乎有些不同由Oracle JDK 8的keytool生成的(具有相同的证书/密钥/密码)。 对我来说,这个问题是在Oracle JVM 8(u241)上运行的Tomcat 8.5下使用keystore-jdk11.p12提出的。 我修复了这个问题,只需使用Oracle JDK 8的keytool重新导入OpenJDK 11生成的密钥库的内容,

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