Comment récupérer des certificates d’un fichier pfx avec c #?

Pendant une demi-journée, j’ai cherché sur Google une manière de lire un fichier .pfx et d’importer les certificates dans le magasin de certificates.

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

Le certificate a été exporté avec

* Échange d’informations personnelles – PKCS # 12 (.PFX)

  • Inclure tous les certificates dans le chemin de certificateion si possible

  • Activer la 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 (des) certificate (s). Je sais qu’il y a trois certificates parce que je vais manuellement dans le certstore (MMC) et l’importe moi-même dans un dossier personnel.

Vous devriez pouvoir obtenir un object de collection contenant les certs dans votre fichier .pfx en utilisant la classe X509Certificate2Collection … voici un exemple de code C #:

 ssortingng certPath = ; ssortingng certPass = ; // 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 certificatees into X509Store objects } 

Selon le type de certificate (cert. Client, cert. Intermédiaire, racine), vous devez ouvrir le magasin de certificates approprié (en tant qu’object X509Store ) pour l’importer.

Découvrez la documentation X509Store :

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

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

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

Si j’ai bien compris, vous souhaitez utiliser StoreName.My pour les certificates clients contenant une clé privée, StoreName.CertificateAuthority pour les certificates de certificateion intermédiaires, et StoreName.Root pour les certificates de certificateion racine.