Экспорт x509certificate2 в массив байтов с закрытым ключом

У меня есть сертификат 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 ответов


на на 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);

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

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();

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


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