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

Loading key to KeyStore fails on Android Oreo

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

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

在 pre 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?

谢谢

问题出在证书上。归一化后问题不复存在。