0

У меня есть самоподписанный сертификат с закрытым ключом в файле PFX. Он добавляется как ресурс в приложение Xamarin.Android C# в Visual Studio 2015. Я использую его как сертификат клиента для установления безопасного HTTPS-соединения с веб-сервисом.xamarin.android X509Certificate2 конструктор/импорт не удалось с помощью пароля SecureString вместо простой строки

Для этого я импортирую сертификат в объект X509Certificate2. Когда я предоставляю пароль для закрытого ключа сертификата как обычный текст (строка), он работает хорошо, но я бы хотел использовать методы конструктора/импорта X509Certificate2, которые используют SecureString.

К сожалению, они бросают

«Невозможно расшифровать исключение сертификата»

в этом случае, независимо от того, если конструктор или метод импорта используется, независимо от того, если сертификат передается как байт [ ] или имя файла.

Мой вопрос в том, почему он не с паролем в SecureString, хорошо работает с простой строкой и как действовать, чтобы использовать SecureString для пароля.

Спасибо!

Георгий

Просто добавить, что тот же самый код с той же файл сертификата и пароль работает хорошо под Windows 10, .NET 4 В противном случае Xamarin.Android является 6.1.1.1 и расширение Xamarin является 4.1.1.3, минимум андроида для цели - уровень API 19, протестированный на Android 6.0

+0

Просто добавить, что тот же самый код с тем же файлом сертификата и паролем работает хорошо под Windows 10, .NET 4 В противном случае Xamarin.Android является 6.1.1.1 и расширение Xamarin является 4.1.1.3, минимум андроида для таргетинга API уровень 19, протестирован на Android 6.0 Georgi –

ответ

0

Причина в том, что SecureString не поддерживается полностью в моно. См. Комментарий source. Он называет класс сертификата Import метод и пропускает (string)null:

[MonoTODO ("SecureString is incomplete")] 
public override void Import (byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags) 
{ 
    Import (rawData, (string) null, keyStorageFlags); 
} 

Также обратите внимание, что SecureString не делает ваши данные 100% secure:

В целом, SecureString является более безопасным, чем строки, поскольку он ограничивает воздействие чувствительных данных струны. Тем не менее, эти строки могут все еще быть , подверженные любому процессу или операции, имеющим доступ к необработанной памяти, , например, вредоносный процесс, запущенный на главном компьютере, дамп процесса или файл подкачки, который можно просмотреть. Вместо использования SecureString для защиты паролей рекомендуется использовать непрозрачный дескриптор для учетных данных, хранящихся вне процесса.

+0

Спасибо, Крумелур, все ясно. Во всяком случае, они должны бросить какое-то другое исключение в этом случае, например, «Не реализовано». Приветствия! –

+0

Отправить заявку на тяну с изменением ;-) – Krumelur

Смежные вопросы