1

我在尝试验证已签名 XML 文档的签名时遇到了麻烦。使用 .NET framework 4.0 或 4.5 时验证失败,但在 3.5、3.0 和 2.0 中通过。XML 文档来自基于 Java 的第 3 方服务。

用于签名验证的代码:

 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);
    }

我尝试手动和直接从第 3 方响应流检查签名,但在 .NET 4.0 或 4.5 中结果始终为 false。

如果签名的 XML 在根元素以外的元素上包含命名空间属性,则 .NET 1.1 中存在已知问题:MSDN

有什么建议么?

4

0 回答 0