我使用.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吗?
谢谢
答案 0 :(得分:0)
问题出在证书中。归一化之后,问题不再存在。