2009-09-11 4 views
3

J'essaie d'exportation cert .pfx:X509Certificate.Export Méthode

string certPath = "D:\\cert.pfx"; 
cert = new X509Certificate2(certPath, "pass"); 

byte[] certData = cert.Export(X509ContentType.Pfx,"pass"); /// **error in this line** 

X509Certificate newCert = new X509Certificate(certData,"pass"); 

Mais il termine avec cette erreur:

Clé non valide pour une utilisation dans l'état spécifié.

Quelqu'un peut-il m'aider? Toute solution comme certificat d'exportation du magasin ?? Etes-vous sûr que le certificat est exportable?

Répondre

0

Regardez at this to help.

EDIT:

Avoir un look at this, semble que ce type a eu un problème similaire et il avait résolu.

+0

Je ne connais aucun C#, mais il semble charger le certificat d'un fichier PKCS # 12, pas d'une carte à puce, donc je ne pense pas que l'export soit un problème ici ... – lapo

+0

oui, clés sont exp ortable –

+0

@lapo, une carte à puce n'est pas la seule méthode pour travailler avec .PFX, par exemple la signature de code dans .NET est faite avec des fichiers PFX, mais je peux avoir la situation confondue avec autre chose. –

8

Je pense que vous n'avez pas pu exporter la clé privée car le constructeur que vous avez utilisé pour créer le certificat X509Certificate2(filePath, password) ne marque pas le certificat résultant comme exportable. Je suggère d'utiliser l'un des constructeurs surchargés qui vous permet de spécifier le drapeau exportable - X509KeyStorageFlags.Exportable, par exemple X509Certificate2(filePath, password, X509KeyStorageFlags.Exportable).

Détails sur disponible constructor overloads pour le X509Certificate2 et d'autres X509KeyStorageFlags sur MSDN Library.

Vous devez également vérifier la propriété X509Certificate2.HasPrivateKey pour vous assurer que vous disposez d'une clé privée associée au certificat.

+0

BTW - cette réponse est correcte. L'affiche aurait dû le marquer comme tel – pm100

0

Pour ceux qui ne ne résoud pas ces réponses, voici ma solution:

sauver lieu comme PFX

byte[] certData = certificado.Export(X509ContentType.Pfx, "pass"); 

essayez d'enregistrer un autre type de contenu, le mien était "Cert"

byte[] certData = certificado.Export(X509ContentType.Cert, "pass"); 
Questions connexes