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