У меня есть ответ от 3-го партийного веб-сервиса. Я загружаю XmlDocument с этим ответом.
string txt = readStream.ReadToEnd();
response = new XmlDocument();
response.PreserveWhitespace = true;
response.LoadXml(txt);
return response;
Теперь я хотел бы подтвердить, что respones подписывается с использованием сертификата. У меня есть метод VerifyXmlDoc(XmlDocument xmlDoc)
, который я нашел на msdn.
Я знаю, что сообщение верное.
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;
}
Если я устанавливаю целевую структуру моего проекта на .NET 3.5 или .NET 3 или .NET 2, он отлично работает. Результат - это правда. Но если я изменю целевую структуру на .NET 4, результат будет ложным. (И я должен использовать .NET 4)
Любые идеи о том, как решить эту проблему?