Лучший способ экспортировать закрытый ключ как байтовый массив - PullRequest
3 голосов
/ 24 октября 2011

Я пишу приложение, которое должно получить закрытый ключ от пользователя, а затем отправить его в другое приложение как base64. Я хочу разрешить пользователю вставлять X509Certificate2 с закрытым ключом.Теперь моя большая проблема заключается в том, как я могу преобразовать закрытый ключ из объекта AsimetricAlgorithm в массив Бейт, который содержит весь закрытый ключ?Я увидел, что могу использовать openSSl - преобразовать весь сертификат в файл pem, а затем в файл RSA - и прочитать закрытый ключ, но я не хочу его использовать, потому что: я не хочу использовать файлы, библиотеку 3P, это не такбезопасный и так далее ... кто-нибудь знает о другом способе сделать это?

заранее спасибо!

1 Ответ

3 голосов
/ 24 октября 2011

Объект AsymmetricAlgorithm, который вы получаете из свойства PrivateKey вашего X509Certificate2, фактически будет экземпляром одного из различных типов, полученных из AsymmetricAlgorithm, таких как RSACryptoServiceProvider, DSACryptoServiceProvider и т. Д. ...

Вам нужно будет определить тип закрытого ключа, с которым вы имеете дело, и правильно его разыграть. После того, как вы разыграете, вы сможете позвонить ExportCspBlob(true), чтобы получить данные секретного ключа.

Пример (при условии использования ключа RSA):

public string GetRSAPrivateKeyBase64(X509Certificate2 certificate)
{
    var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
    if (privateKey == null) throw new Exception("Not an RSA private key");
    // Export the CSP blob, including private key parameters 
    var cspBlob = privateKey.ExportCspBlob(true);
    return Convert.ToBase64String(cspBlob);
}
...