我在尝试验证签名的XML文档的签名时遇到了麻烦。 使用.NET framework 4.0或4.5时验证失败,但是传递3.5,3.0和2.0。 XML文档来自第三方基于Java的服务。
用于签名验证的代码:
public static Boolean VerifyXmlFile(String filename)
{
// Create a new XML document.
var xmlDocument = new XmlDocument() { PreserveWhitespace = true };
// Load the passed XML file into the document.
xmlDocument.Load(filename);
// Create a new SignedXml object and pass it
// the XML document class.
var signedXml = new SignedXml(xmlDocument);
// Find the "Signature" node and create a new
// XmlNodeList object.
XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");
// Load the signature node.
signedXml.LoadXml((XmlElement)nodeList[0]);
// Check the signature using known certifricate and return the result.
var certificate = new X509Certificate2("testCert.cer", "");
return signedXml.CheckSignature(certificate.PublicKey.Key);
}
我试图手动和直接从第三方响应流检查签名,但在.NET 4.0或4.5中结果始终为false。
如果签名的XML包含除根元素之外的元素的命名空间属性,则.NET 1.1中存在已知问题:MSDN
有什么建议吗?