Экспорт X509Certificate2 в байтовый массив с закрытым ключом - PullRequest
21 голосов
/ 21 марта 2012

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

Я пробовал много способов, но не удалось экспортироватьсертификат с закрытым ключом .

X509Store store = new X509Store(StoreLocation.CurrentUser);      

store.Open(OpenFlags.ReadOnly);

X509Certificate2 cert = store.Certificates[1];

byte[] certBytes = cert.GetRawCertData(); // Obviously does not work!

Можно ли успешно экспортировать сертификат с закрытым ключом в байтовый массив?

Помощь очень важна.

Ответы [ 2 ]

27 голосов
/ 21 марта 2012

Функция Export класса X509Certificate2 позволяет экспортировать сертификат с закрытым ключом для байтового массива.

Следующий код демонстрирует экспорт сертификата с закрытым ключом:

X509Store store = new X509Store(StoreLocation.CurrentUser);

store.Open(OpenFlags.ReadOnly);

X509Certificate2 cert = store.Certificates[1];

// Export the certificate including the private key.
byte[] certBytes = cert.Export(X509ContentType.Pkcs12);

Для защиты экспортируемого сертификата используйте следующую перегрузку функции Export:

byte[] certBytes = cert.Export(X509ContentType.Pkcs12, "SecurePassword");

НАЧАТЬ РЕДАКТИРОВАТЬ

Для импорта сертификата используйте следующий код:

X509Certificate2 certToImport = new X509Certificate2(arr, "SecurePassword");

// To mark it as exportable use the following constructor:
X509Certificate2 certToImport = new X509Certificate2(arr, "SecurePassword", X509KeyStorageFlags.Exportable);
// certToImport.HasPrivateKey must be true here!!

X509Store store2 = new X509Store(StoreName.TrustedPublisher,
                                 StoreLocation.CurrentUser);
store2.Open(OpenFlags.MaxAllowed);

store2.Add(certToImport);
store2.Close();

КОНЕЦ РЕДАКТИРОВАНИЯ

3 голосов
/ 22 марта 2012

Одной из причин того, что закрытый ключ не был получен, могло быть то, что он был помечен как «Не экспортируемый», когда он был первоначально добавлен в CAPI.В таком случае, я не верю, что это какой-то реальный способ получить это.

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