Как получить сертификаты из файла 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.