Android 9-KeyStore异常android.os.ServiceSpecificException [英] Android 9 - KeyStore exception android.os.ServiceSpecificException
问题描述
如果我在Android 9上运行此代码,则会收到以下异常:
If I run this code on Android 9, I receive the follow exception:
private static KeyStore.PrivateKeyEntry getPrivateKeyEntry(String alias) {
try {
KeyStore ks = KeyStore
.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
ks.load(null);
KeyStore.Entry entry = ks.getEntry(alias, null);
if (entry == null) {
Log.w(TAG, "No key found under alias: " + alias);
Log.w(TAG, "Exiting signData()...");
return null;
}
if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
Log.w(TAG, "Not an instance of a PrivateKeyEntry");
Log.w(TAG, "Exiting signData()...");
return null;
}
return (KeyStore.PrivateKeyEntry) entry;
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
return null;
}
}
例外:
KeyStore异常 android.os.ServiceSpecificException :(代码7) 在android.os.Parcel.createException(Parcel.java:1956) 在android.os.Parcel.readException(Parcel.java:1910) 在android.os.Parcel.readException(Parcel.java:1860) 在android.security.IKeystoreService $ Stub $ Proxy.get(IKeystoreService.java:786) 在android.security.KeyStore.get(KeyStore.java:195) 在android.security.keystore.AndroidKeyStoreSpi.engineGetCertificateChain(AndroidKeyStoreSpi.java:118) 在java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:484) 在java.security.KeyStore.getEntry(KeyStore.java:1560) 在com.phenodev.testenc.KeyStoreHelper.getPrivateKeyEntry(KeyStoreHelper.java:151) 在com.phenodev.testenc.KeyStoreHelper.encrypt(KeyStoreHelper.java:173) 在com.phenodev.testenc.KeyStoreEncryptor.encrypt(KeyStoreEncryptor.java:19)
KeyStore exception android.os.ServiceSpecificException: (code 7) at android.os.Parcel.createException(Parcel.java:1956) at android.os.Parcel.readException(Parcel.java:1910) at android.os.Parcel.readException(Parcel.java:1860) at android.security.IKeystoreService$Stub$Proxy.get(IKeystoreService.java:786) at android.security.KeyStore.get(KeyStore.java:195) at android.security.keystore.AndroidKeyStoreSpi.engineGetCertificateChain(AndroidKeyStoreSpi.java:118) at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:484) at java.security.KeyStore.getEntry(KeyStore.java:1560) at com.phenodev.testenc.KeyStoreHelper.getPrivateKeyEntry(KeyStoreHelper.java:151) at com.phenodev.testenc.KeyStoreHelper.encrypt(KeyStoreHelper.java:173) at com.phenodev.testenc.KeyStoreEncryptor.encrypt(KeyStoreEncryptor.java:19)
请帮助修复它.
推荐答案
最后,我找到了解决方案.由于Android P (KeyStore.PrivateKeyEntry) keyStore.getEntry("alias", null)
并不是获取私钥的正确方法,因此似乎.
Finally I found a solution. It looks like since Android P (KeyStore.PrivateKeyEntry) keyStore.getEntry("alias", null)
is not a proper way to get private key.
我能够通过这种方式访问私钥/公钥来摆脱此警告
I was able to get rid of this warning by accessing private/public key this way
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
PrivateKey privateKey = (PrivateKey) keyStore.getKey("alias", null);
PublicKey publicKey = keyStore.getCertificate("alias").getPublicKey();
这篇关于Android 9-KeyStore异常android.os.ServiceSpecificException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!