我使用.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类似的问题吗?
谢谢
问题出在证书中。归一化后问题不再存在。