J'ai une réponse à partir d'un 3 ème partie du service web. Je charge un XmlDocument avec cette réponse.
string txt = readStream.ReadToEnd();
response = new XmlDocument();
response.PreserveWhitespace = true;
response.LoadXml(txt);
return response;
Maintenant, je voudrais vérifier que le respones est signé à l'aide du certificat. J'ai un VerifyXmlDoc(XmlDocument xmlDoc)
méthode que j'ai trouvé sur msdn.
Je sais que le message est correct.
public bool VerifyXmlDoc(XmlDocument xmlDoc)
{
SignedXml signed = new SignedXml(xmlDoc);
XmlNodeList signatureNodeList = xmlDoc.GetElementsByTagName("Signature");
signed.LoadXml((XmlElement)signatureNodeList[0]);
X509Certificate2 serviceCertificate = null;
foreach (KeyInfoClause clause in signed.KeyInfo)
{
if (clause is KeyInfoX509Data)
{
if (((KeyInfoX509Data)clause).Certificates.Count > 0)
{
serviceCertificate = (X509Certificate2)((KeyInfoX509Data)clause).Certificates[0];
}
}
}
bool result = signed.CheckSignature(serviceCertificate, true);
return result;
}
Si j'ai mis cible cadre de mon projet de .NET 3.5 ou .NET 3, ou .NET 2, il fonctionne très bien. Le résultat est vrai. Mais si je change de cible cadre au .NET 4 résultat est faux. (Et je dois utiliser .NET 4)
Toutes les idées sur la façon de résoudre ce problème?