Хранение закрытого ключа и сертификата (.pem) на android / iOS Keystore C# - PullRequest
0 голосов
/ 09 июля 2020

Я хотел бы создать асимметричную пару ключей c на клиентском устройстве (телефоне iOS или Android с запущенным Xamarin.Forms) и создать запрос на подпись сертификата, который будет отправлен на ASP. NET Core Restful API на сервере linux с моей базой данных. Для этого я использую Portable Bouncy Castle и базовую версию net в API.

Отправленный CSR будет подписан настраиваемым CA через WebAPI и добавлен в таблицу сертификатов в моей базе данных , так что, когда устройство отправляет запрос GET, оно может его получить (одноразовый ключ активации используется для аутентификации публикации csr, а также для получения подписанного сертификата).

Использование это , я создал закрытый ключ и запрос CSR и преобразовал csr в строку, которую можно отправить в API. Когда API получает это, он помещает его в текстовый файл, к которому сценарий обращается, чтобы подписать его с помощью сертификата CA и ключа CA, создавая файл client-cert.pem. Это будет прочитано как текст и сохранено в базе данных, чтобы устройство могло его извлечь.

После этого я хотел бы сохранить сертификат и закрытый ключ в хранилище ключей устройства, однако, поскольку я использую Bouncy Castle для создания Keypair, он имеет тип AsymmetricCipherKeyPair.

Как мне go хранить эти элементы в хранилище ключей, чтобы к нему можно было получить доступ для аутентификации клиента при подключении к БД? В настоящее время я не уверен, как Xamarin.Forms обрабатывает хранилища ключей и как хранить в них ключи / сертификаты.

1 Ответ

0 голосов
/ 09 июля 2020

Если вы можете найти способ преобразовать AsymmetricCipherKeyPair в строку, вы можете использовать Xamarin.Essentials: Secure Storage для хранения этих ключей в KeyStore:

Чтобы сохранить значение для заданный ключ в защищенном хранилище:

try
{
  await SecureStorage.SetAsync("oauth_token", "secret-oauth-token-value");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

Чтобы получить значение из безопасного хранилища:

try
{
  var oauthToken = await SecureStorage.GetAsync("oauth_token");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

Обратитесь: AsymmetricCipherKeyPair и / bouncy-castle- rsa-преобразование-ключей-в-строковый-формат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...