0

我有 ac# 应用程序,我用它来处理来自第 3 方的加密和签名的 xml 文件。我使用有效证书在应用程序内生成和签名的文件通过了验证,没有问题。我在验证从第 3 方收到的文件时遇到问题。(这是一个有信誉的来源,所以我排除了他们的问题)

文件已成功解密,但签名验证始终返回 false。我试图剥离他们的签名并自己签署文件 - 我生成了相同的 <DigestValue> 并且除了二进制字段的差异(正如预期的那样使用不同的证书),文件结构是相同的

我将 .pem 文件加载到 X509Certificate2 对象并尝试验证接收到的文件。它具有所有必要的元素,但验证总是失败而没有任何说明原因。

还有什么我需要做的吗?有什么好的资源可以了解 CheckSignature() 的作用吗?

签名验证码(处理自签名文件)

public static bool VerifySignedXml(string signedXmlPath, X509Certificate2 theirPublicKey)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(signedXmlPath);

        XmlElement signature = (XmlElement)doc.GetElementsByTagName("Signature")[0];

        SignedXml sig = new SignedXml(doc);
        sig.LoadXml(signature);

        bool bVerified = sig.CheckSignature(theirPublicKey , false);

        return bVerified;
    }

谢谢

4

0 回答 0