Jak odzyskać certyfikaty z pliku pfx za pomocą c#?

Od pół dnia szukałem sposobu na odczytanie pliku .pfx i zaimportowanie certyfikatów do certstore .

Na razie jestem w stanie odczytać plik .pfx z X509Certifcate i zaimportować jeden certyfikat w pliku .pfx. Jak na razie dobrze, ale w pliku .pfx są trzy certyfikaty i podczas ładowania .pfx z X509Certificate nie jestem w stanie zobaczyć pozostałych dwóch certyfikatów.

Certyfikat został wyeksportowany z

*osobiste Wymiana informacji-PKCS #12 (.PFX)

  • Dołącz wszystkie certyfikaty w ścieżce certyfikacji, jeśli to możliwe

  • Włącz silną ochronę (wymaga IE 5.0, NT 4.0 SP4 lub nowszego)

Są to opcje wybrane podczas eksportowania certyfikatu(certyfikatów). Wiem, że są trzy certyfikaty, ponieważ ręcznie wchodzę do certstore (MMC) i sam importuję je do folderu osobistego.

 20
Author: Draken, 2011-02-18

1 answers

Powinieneś być w stanie uzyskać obiekt kolekcji zawierający certy w twoim .plik pfx {[11] } za pomocą klasy X509Certificate2Collection... oto przykładowy kod 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);

Następnie możesz iterować nad zbiorem:

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
}

W zależności od typu certyfikatu (client cert, intermediate CA cert, root CA) musisz otworzyć odpowiedni sklep cert (jako obiekt X509Store), aby go zaimportować.

Zobacz X509Store docs:

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

I poszczególnych członków w StoreName wyliczeniu:

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

Z tego, co rozumiem, chcesz użyć StoreName.My dla certyfikatów klienckich zawierających klucz prywatny, StoreName.CertificateAuthority dla pośrednich certyfikatów CA i StoreName.Root dla certyfikatów root CA.

 33
Author: Bill Agee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 19:47:20