使用.NET 4或4.5时,SignedXml.CheckSignature始终失败,但在.NET 3.5,3或2中有效

时间:2013-05-27 08:32:02

标签: c# security .net-4.0 .net-4.5 signedxml

我在尝试验证签名的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

有什么建议吗?

0 个答案:

没有答案