2009-02-17 8 views
4

Je suis à la recherche de moyens de décoder un fichier PKCS # 12 dans .NET, j'ai besoin d'extraire la clé privée et tous les certificats afin que je puisse accéder par programme aux éléments suivants.Décoder un fichier PKCS # 12

  • module
  • publicExponent
  • privateExponent
  • prime1
  • PRIME2
  • exponent1
  • exponent2
  • coefficient

J'ai besoin de cette information pour pouvoir utiliser PKCS # 11 avec succès pour créer une clé privée et un certificat sur un token USB.

J'ai trouvé un site Web qui utilise OpenSSL pour afficher ces données. J'étais très excité quand j'ai trouvé OpenSSL.NET cependant la fonctionnalité pour séparer les fichiers PKCS # 12 n'a pas encore été implémentée. Je me demandais si quelqu'un connaissait des altenatives.

Merci

Rohan

Répondre

2

J'ai utilisé extensivement l'API bouncy castle sur un projet récent, sur son port Java, et cela fonctionne parfaitement, sans faille. Je parie que leur C# n'est pas très différent, et il fait un très bon travail à ce qui est ciblé.

http://www.bouncycastle.org/

0

Vous devriez pouvoir utiliser OpenSSL directement via Pinvoke. Peut-être pourriez-vous contribuer au projet OpenSSL.NET lorsque vous le ferez fonctionner. Le fournisseur de chiffrement win32 est une bonne alternative, mais il peut être un peu rigide en termes de formats qu'il peut analyser et générer.

3

Vive Manuel,

J'ai téléchargé l'API Bouncy Castle et il n'a pas fallu longtemps pour trouver ce que je avais besoin. Le code source inclut une liste complète de tests unitaires.

static void Main(string[] args) 
{ 
    char[] password = new char[] {'p','a','s','s','w','o','r','d'}; 

    using(StreamReader reader = new StreamReader(@"Test.pfx")) 
    { 
     Pkcs12Store store = new Pkcs12Store(reader.BaseStream,password); 
     foreach (string n in store.Aliases) 
     { 
      if(store.IsKeyEntry(n)) 
      { 
       AsymmetricKeyEntry key = store.GetKey(n); 

       if(key.Key.IsPrivate) 
       { 
        RsaPrivateCrtKeyParameters parameters = key.Key as RsaPrivateCrtKeyParameters; 
        Console.WriteLine(parameters.PublicExponent); 
       }      
      } 
     } 
    } 
} 
Questions connexes