Генерация CSR с использованием ключей Android KeyStore

Есть ли способ генерировать CSR ключей, хранящихся в хранилище ключей Android? Я знаю, что вы можете генерировать ключи, затем генерировать CSR и, наконец, хранить ключи в хранилище ключей Android, но также возможно ли генерировать CSR в более ранний момент, сгенерированный и уже внутри сохраненных ключей KeyStore?

Я попытался сделать это точно так же, как вы сделали бы это со свежесгенерированными ключами, используя Spongycastle. Но я столкнулся с проблемой при создании файла JCAContentSigner. Запуск этого кода:

new JcaContentSignerBuilder("SHA256WithRSAEncryption").setProvider("SC").build(privateKey)

Это вызовет исключение:

org.spongycastle.operator.OperatorCreationException: cannot create signer: Supplied key (android.security.keystore.AndroidKeyStoreRSAPrivateKey) is not a RSAPrivateKey instance

Без установки SpongyCastle в качестве поставщика безопасности я получаю это исключение:

org.spongycastle.operator.OperatorCreationException: cannot create signer: Keystore operation failed

Итак, мой вопрос: возможен ли один из этих трех вариантов:

  1. добавить android.security.keystore.AndroidKeyStoreRSAPrivateKey в экземпляр RSAPrivateKey?

  2. заставить его работать, не устанавливая SpongyCastle в качестве поставщика безопасности?

  3. создание CSR без SpongyCastle?


person C3nturyFox    schedule 02.05.2020    source источник
comment
Отвечает ли это на ваш вопрос? Создать запрос на подпись сертификата в приложении для Android   -  person Josh Correia    schedule 25.07.2020
comment
Нет, в теме, на которую вы ссылаетесь, нет ответа ... во всяком случае, я уже нашел свое собственное решение.   -  person C3nturyFox    schedule 25.07.2020
comment
Каково решение? Я тоже после этого... Спасибо   -  person NOP-MOV    schedule 29.07.2020
comment
@ NOP-MOV Причина, по которой он не работает, заключается в следующем: когда вы встраиваете JcaContentSignerBuilder в PKCS10CertificationRequest, вы передаете ему ContentSigner в качестве аргумента. Сам ContentSigner создается путем передачи вашего PrivateKey в ContentSignerBuilder. Когда ContentSigner сейчас попытается что-то подписать, у него ничего не получится, потому что он не может использовать для подписи ваш ключ с аппаратной поддержкой. Решение этой проблемы состоит в том, чтобы перезаписать build() из ContentSignerBuilder, чтобы он использовал ваш ключ с аппаратной поддержкой.   -  person C3nturyFox    schedule 30.07.2020
comment
Сорри, форматирование сбито. Надеюсь, более или менее понятно, что я имел в виду. Если нет, напишите мне сообщение.   -  person C3nturyFox    schedule 31.07.2020
comment
Спасибо большое! Попробую использовать. Спасибо!!!   -  person NOP-MOV    schedule 01.08.2020