在Android Oreo上加载密钥到KeyStore失败

时间:2017-10-20 11:10:56

标签: java android bouncycastle android-8.0-oreo

我使用.p12证书来签署XML SOAP请求。为了加载证书我正在使用以下代码:

private void loadP12(byte[] p12data, char[] password)  {
    try {
        KeyStore ks=KeyStore.getInstance("PKCS12");
        ks.load(new ByteArrayInputStream(p12data), password);
        ...
}

在Oreo Android之前完美运行。但是在Android 8上,我在 ks.load()

上遇到异常
Caused by: java.io.IOException: exception unwrapping private key - java.security.InvalidKeyException: Invalid key encoding.
    at com.android.org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.unwrapKey(PKCS12KeyStoreSpi.java:644)
    at com.android.org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineLoad(PKCS12KeyStoreSpi.java:875)
    at java.security.KeyStore.load(KeyStore.java:1484)
    at loadP12(EetRegisterRequest.java:1352)

可在此处找到证书文件http://www.etrzby.cz/assets/cs/prilohy/EET_CA1_Playground_v1.zip所有.p12文件都有密码 eet

这可能是什么问题?证书文件应该没问题。它可能与此处提到的问题类似http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8175251吗?

谢谢

1 个答案:

答案 0 :(得分:0)

问题出在证书中。归一化之后,问题不再存在。