我有 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;
}
谢谢