В настоящее время мы столкнулись с проблемой, где иногда, когда пользователь installes наше приложение, приложение пытается получить доступ и генерировать ключ в хранилище, но хранилище ключей выдает это исключение:Не удается создать ключ в Android хранилище
Caused by: java.lang.IllegalStateException: could not generate key in keystore
at android.security.AndroidKeyPairGenerator.generateKeyPair(AndroidKeyPairGenerator.java:100)
at java.security.KeyPairGenerator$KeyPairGeneratorImpl.generateKeyPair(KeyPairGenerator.java:275)
Мы считаем, что это связано с тем, что шаблон разблокировки телефона не разблокирует хранилище ключей, и/или администратор устройства блокирует хранилище ключей.
Это как хранилище ключей создается и как генерируются ключи:
public SecretKeyWrapper(Context context, String alias) throws GeneralSecurityException, IOException {
mCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
final KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
if (!keyStore.containsAlias(alias)) {
generateKeyPair(context, alias);
}
final KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, null);
mPair = new KeyPair(entry.getCertificate().getPublicKey(), entry.getPrivateKey());
}
private static void generateKeyPair(Context context, String alias) throws GeneralSecurityException {
final Calendar start = new GregorianCalendar();
final Calendar end = new GregorianCalendar();
end.add(Calendar.YEAR, 100);
final KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context)
.setAlias(alias)
.setSubject(new X500Principal("CN=" + alias))
.setSerialNumber(BigInteger.ONE)
.setStartDate(start.getTime())
.setEndDate(end.getTime())
.build();
final KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
gen.initialize(spec);
gen.generateKeyPair();
}
Кто-нибудь знает, как:
- Блокировка хранилища ключей в качестве администратора устройства?
- Разблокировать хранилище ключей, когда оно заблокировано администратором устройства?
- Или воспроизвести эту проблему по-другому?
Показать код, как вы создаете Keystore. – Jorgesys
Вы нашли решение? –