0
我有以下setKey()
:的Android密钥库返回TrustedCertificateEntry代替PrivateKeyEntry
try {
if(keyPair!=null) {
privateKeyResult = (RSAKey) keyPair.getPrivate();
certificate = generateCertificate(keyPair, before, after);
}
} catch (NoSuchAlgorithmException | CertificateEncodingException | InvalidKeyException | NoSuchProviderException | SignatureException e) {
logger.error("Error in preparing for insertion to keystore", e);
sendLogs(e);
}
try {
if(keyStore!=null) {
keyStore.setKeyEntry(alias, (Key) privateKeyResult, null, new Certificate[]{certificate});
}
} catch (KeyStoreException e) {
logger.error("Error in insertion to keystore", e);
sendLogs(e);
}
及以下信息getKey():
try {
privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, null);
if (privateKeyEntry == null) {
if (createKeyIfNotExists) {
logger.info("key is null, will attempt to create a new one");
setKey(alias,null);
//get the newly create key
privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, null);
}
} else {
//logger.debug("key was found");
privateKey = (RSAKey) privateKeyEntry.getPrivateKey();
return privateKey;
}
} catch (NoSuchAlgorithmException | UnrecoverableEntryException | KeyStoreException | NullPointerException e) {
logger.error("Exception getting key from keystore", e);
sendLogs(e);
}
,而它的工作原理上的设备的99.98%,不过,在一些(主要是OnePlus)我有以下例外情况:
java.security.KeyStore$TrustedCertificateEntry cannot be cast to java.security.KeyStore$PrivateKeyEntry
在线privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, null);
,同时试图获得PrivateKeyEntry
。我究竟做错了什么?我怎样才能解决这个问题,以确保应用程序在100%的设备上工作?谢谢。
是的,这将有助于避免类转换异常,但主要问题仍然是 - 为什么会返回密钥库输入错误类型? –