В настоящее время я пытаюсь собрать действующую реализацию KeyStore в приложении для Android. В настоящее время я строю против минимального API, равного 18, чтобы я мог полностью воспользоваться приватным KeyStore
для моего приложения. Я пытаюсь создать n
номер KeyPair
объектов, а также сохранить их в KeyStore
для последующего поиска. Я посмотрел на this question, однако он кажется немного устаревшим (2012) и на самом деле ничего не отвечает на все. Честно говоря, большинство вопросов, которые я нашел в Stack Overflow, кажется невероятно устаревшими, например here и here.Система Android KeyStore - Сохранение KeyPair?
Таким образом, мой предполагаемый поток заключается в следующем:
- Попытка получить открытый ключ из сертификата correllating с соответствующим псевдонимом.
- В случае, если этот открытый ключ равен NULL, создайте новый ключ.
- Включить
KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
- Создать пару ключей.
Все до этого момента очень прямолинейно и работает отлично. Затем он становится волосатым.
- Сохраните пару ключей. Инициализировать KeyStore через
KeyStore.getInstance("AndroidKeyStore");
- Попытка создать
X509Certificate
черезX509V3CertificateGenerator
. Этот сертификат подписан сам. Для cert я установил алгоритм подписи как"SHA1WithRSAEncryption"
. - Наконец, вызовите
keyStore.setKeyEntry
Для этого последнего шага кажется, есть два варианта:
keyStore.setKeyEntry(String alias, byte[] key, Certificate[] chain);
или
keyStore.setKeyEntry(String alias, Key key, char[] password, Certificate[] chain);
я начал со второй из два, но получил java.security.KeyStoreException: entries cannot be protected with passwords
.... Ладно, это странно, почему существует метод, который гарантирует исключение? Давайте попробуем номер двери 1.
В какой момент, когда я вызываю setKeyEntry и передаю keyPair.getPrivate(). GetEncoded() как второй аргумент, я получаю java.security.KeyStoreException: Operation not supported because key encoding is unknown
из системы.
Так что я немного растерялся. Такое шифрование относительно новое для меня, поэтому я надеялся, что кто-то может пролить свет на очень запутанную ситуацию, которая является системой Android KeyStore.