Как получить сертификаты из файла pfx с помощью c#?

Я полдня гуглил в поисках способа прочитать .pfx файл и импортировать сертификаты в certstore.

до сих пор я могу читать с X509Certifcate и возможность импортировать один сертификат в . Пока все хорошо, но есть три сертификата в .pfx файл и при загрузке .pfx с X509Certificate, Я не могу видеть два других сертификата.

сертификат был экспортируется с помощью

*обмен персональной информацией-PKCS #12 (.Pfx-файл)

  • включить все сертификаты в путь сертификации, если это возможно

  • включить усиленную защиту (требуется IE 5.0, NT 4.0 с SP4 или выше)

это параметры, выбранные при экспорте сертификата(ов). Я знаю, что есть три сертификата, потому что я вручную вхожу в certstore (MMC) и импортировать его сам в личную папку.

1 ответов


вы должны иметь возможность получить объект коллекции, содержащий сертификаты в вашем .pfx-файл С помощью X509Certificate2Collection класса... вот пример кода на C#:

string certPath = <YOUR PFX FILE PATH>;
string certPass = <YOUR PASSWORD>;

// Create a collection object and populate it using the PFX file
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certPath, certPass, X509KeyStorageFlags.PersistKeySet);

затем вы можете перебирать коллекцию:

foreach (X509Certificate2 cert in collection)
{
    Console.WriteLine("Subject is: '{0}'", cert.Subject);
    Console.WriteLine("Issuer is:  '{0}'", cert.Issuer);

    // Import the certificates into X509Store objects
}

в зависимости от типа сертификата (сертификат клиента, промежуточный сертификат CA, корневой CA) вам нужно будет открыть соответствующее хранилище сертификатов (как X509Store object), чтобы импортировать его.

Проверьте X509Store docs:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store.aspx

и различные члены в StoreName перечисление:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspx

насколько я понимаю, вы хотите использовать StoreName.My для клиентских сертификатов, содержащих закрытый ключ,StoreName.CertificateAuthority для промежуточных CA certs, и StoreName.Root для корневых сертификатов CA.