0

我尝试在 C# 中实现 XAdES 签名验证。它适用于像这样的示例文档。然而,在像这种方法 CheckSignature 这样的实际文档上,即使它是一个有效的文档,它也会返回 false(在此处进行了额外验证)。

这是我的代码

public bool Verify(Stream xmlFileStream)
{
    var xmlDoc = new XmlDocument();
    xmlDoc.Load(xmlFileStream);

    var signatureNodes = xmlDoc.GetElementsByTagName("ds:Signature");
    if (signatureNodes == null || signatureNodes.Count != 1)
    {
        throw new Exception("Wrong number of signature nodes in document");
    }

    var signedXml = new SignedXml(xmlDoc);
    signedXml.LoadXml((XmlElement)signatureNodes[0]);            
    var signatureValid = signedXml.CheckSignature();
    return signatureValid;
}

我尝试过加载带有和不保留空格的 xml,甚至尝试从文档中删除命名空间,但没有任何效果。

编辑
我已经打开了诊断日志,它说

System.Security.Cryptography.Xml.SignedXml Information: 12: [SignedXml # 0060fb3c, VerificationFailure] Verification failed while checking the Reference.

不幸的是,它并没有对我说太多,我仍然不知道为什么这里的参考验证失败,而在线验证服务似乎还可以。

4

0 回答 0