C# метод CheckSignature возвращает false для действительного подписанного документа XAdES - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь реализовать проверку подписи XAdES в C#. Он отлично работает для образцов документов, таких как this . Однако в реальном документе, таком как , этот метод 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 с сохранением пробелов и без них, даже пытался удалить пространства имен из документа, ничего не работает.

РЕДАКТИРОВАТЬ
Я перевернул в журнале диагностики c и там написано:

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

К сожалению, мне это мало что говорит, я до сих пор не представляю, почему проверка ссылки здесь не удалась, хотя это нормально для службы онлайн-проверки.

...