2016-02-02 5 views
0

J'essaye de signer un fichier XML. Voici le code (de MSDN):C# Sign Xml avec X509Certificate2

RSACryptoServiceProvider Key = new RSACryptoServiceProvider(); 
SignXmlFile(XmlStart, XmlEnd, Key); 

Comment puis-je envoyer comme clé un X509Certificate2? Réservoirs! Francesco

+0

Je crois qu'un nu 'RSACryptoServiceProvider' est trop moins d'avoir un 'X509Certificate2'. Pourriez-vous éventuellement développer votre question et ajouter des détails sur la façon dont vous achetez réellement le fournisseur de chiffrement et si votre 'SignXmlFile' attend moins que le' X509Certificate2 'à part entière? –

+0

Dupliquer de https://stackoverflow.com/questions/1195728/in-c-sign-an-xml-with-ax-509-certificate-and-check-the-signature –

Répondre

0

Ici, vous utilisez la clé (publique/privée) du certificat.

Option 1)

X509Certificate2 cert = RetrieveCertificate("abcd"); 
var key = cert.PrivateKey; 

private static X509Certificate2 RetrieveCertificateFromStore(string certificateName) 
{ 
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.OpenExistingOnly); 
    var cert = store.Certificates.OfType<X509Certificate2>().AsEnumerable().FirstOrDefault(c => c.FriendlyName == certificateName); 
    return cert; 
} 

Ou Récupérer certificat de fichier:

private static X509Certificate2 RetrieveCertificateFromFile(string certPath) 
    { 
     // string certPath = @"C:\Certificates\myCert.pfx"; 
     string certPass = "mycertPass"; 
     // Create a collection object and populate it using the PFX file 
     X509Certificate2Collection collection = new X509Certificate2Collection(); 
     collection.Import(certPath, certPass, X509KeyStorageFlags.PersistKeySet); 
     // Instead of foreach you can directly retrieve the certificate from collection as well. 
     foreach (X509Certificate2 cert in collection) 
     { 
      // Import the certificates into X509Store objects 
      return cert; 
     } 
     return null; 
    } 

Option 2)

RSACryptoServiceProvider key = RetrieveKey(cert, EnumKeyType.Private); 
+0

Je crois que la question est l'inverse - Il possède le 'RSACryptoServiceProvider' et il aimerait en faire sortir le' X509Certificate2'. Ce que vous montrez est comment avoir 'RSACryptoServiceProvider' quand vous avez le' X509Certificate2'. –

+0

De RSACryptoServiceProvider, nous ne pouvons pas avoir un certificat. Je crois, il cherche un moyen d'obtenir la clé de l'instance X509Certificate2. – Habeeb

+0

Je sais que nous ne pouvons pas, c'est pourquoi j'ai posé une question ci-dessous son commentaire. Je crois toujours qu'il veut avoir le cert sur une clé et il ne sait tout simplement pas que ça ne marchera pas. Vous, d'un autre côté, supposé qu'il veut quelque chose qui est facile et réalisable, malgré sa question est claire. Attendons toute activité de l'OP mais si je ne me trompe pas, ta réponse n'est pas ce qu'il a demandé. –