la signature d'un document xml avec certificat x509

Chaque fois que j'essaie d'envoyer un signé XML, web service vérificateur de la rejette.

À signer le document que j'ai juste adapté cet exemple de code fourni par Microsoft:

http://msdn.microsoft.com/es-es/library/ms229745(v=vs. 110).aspx

Ma mise en œuvre:

    public static XmlDocument FirmarXML(XmlDocument xmlDoc)
{
try
{
X509Certificate2 myCert = null;
var store = new X509Store(StoreLocation.CurrentUser); //StoreLocation.LocalMachine fails too
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates;
foreach (var certificate in certificates)
{
if (certificate.Subject.Contains("xxx"))
{
myCert = certificate;
break;
}
}
if (myCert != null)
{
RSA rsaKey = ((RSA)myCert.PrivateKey);
//Sign the XML document. 
SignXml(xmlDoc, rsaKey);                    
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return xmlDoc;
}
//Sign an XML file. 
//This document cannot be verified unless the verifying 
//code has the key with which it was signed.
public static void SignXml(XmlDocument xmlDoc, RSA Key)
{
//Check arguments.
if (xmlDoc == null)
throw new ArgumentException("xmlDoc");
if (Key == null)
throw new ArgumentException("Key");
//Create a SignedXml object.
SignedXml signedXml = new SignedXml(xmlDoc);
//Add the key to the SignedXml document.
signedXml.SigningKey = Key;
//Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "";
//Add an enveloped transformation to the reference.
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
//Add the reference to the SignedXml object.
signedXml.AddReference(reference);
//Compute the signature.
signedXml.ComputeSignature();
//Get the XML representation of the signature and save
//it to an XmlElement object.
XmlElement xmlDigitalSignature = signedXml.GetXml();
//Append the element to the XML document.
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
}

Je pense que je suis en suivant les mêmes étapes à l'aide de mon propre certificat, toutefois, il ne fonctionne pas comme prévu.

Toute suggestion sera la bienvenue.

OriginalL'auteur Michael Knight | 2014-04-30