web-dev-qa-db-fra.com

Comment récupérer des certificats d'un fichier pfx avec c #?

Cela fait une demi-journée que je cherche sur Google pour trouver un moyen de lire un .pfx fichier et importez les certificats dans certstore.

Jusqu'à présent, je peux lire le .pfx fichier avec X509Certifcate et capable d'importer un certificat dans le .pfx fichier. Jusqu'ici tout va bien, mais il y a trois certificats dans le .pfx fichier et lors du chargement du .pfx avec X509Certificate, Je ne peux pas voir les deux autres certificats.

Le certificat a été exporté avec

* Échange d'informations personnelles - PKCS # 12 (.PFX)

  • Inclure tous les certificats dans le chemin de certification si possible

  • Activer une protection renforcée (nécessite IE 5.0, NT 4.0 SP4 ou supérieur)

Ce sont les options sélectionnées lors de l'exportation du ou des certificats. Je sais qu'il y a trois certificats parce que je vais manuellement dans le certstore (MMC) et l'importe moi-même dans un dossier personnel.

32
Chloé

Vous devriez pouvoir obtenir un objet de collection contenant les certificats dans votre fichier . Pfx en utilisant le X509Certificate2Collection classe ... voici un exemple de code 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);

Ensuite, vous pouvez parcourir la collection:

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
}

Selon le type de certificat (certificat client, certificat CA intermédiaire, autorité de certification racine), vous devrez ouvrir le magasin de certificats approprié (en tant que X509Store objet) pour l'importer.

Vérifiez X509Store documents:

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

Et les différents membres de l'énumération StoreName:

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

D'après ce que je comprends, vous souhaitez utiliser StoreName.My pour les certificats clients qui contiennent une clé privée, StoreName.CertificateAuthority pour les certificats CA intermédiaires et StoreName.Root pour les certificats d'autorité de certification racine.

44
Bill Agee