Ошибка проверки подписи XML. DGI UY всегда возвращает false.C#

Место общения программистов C#
Ответить
Anonymous
 Ошибка проверки подписи XML. DGI UY всегда возвращает false.

Сообщение Anonymous »

Я работаю над проверкой подписи XML-конверта в данном случае из Уругвая,
но из-за метода проверки подписи он всегда возвращает false, используя .Net C#
Тесты, выполненные с неудачными результатами, применяют следующий код, который получает сертификат и подпись в цикле, учитывая, что XML имеет несколько подписей и один сертификат.xml, используемый для проверки

Код: Выделить всё

using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;

public static void Main(string[] args)
{
string xmlFilePath = @"d:\Sob_219999830019_Ej_Mod_19072016.xml";//args[0];

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;   /*It was validated by both true and false*/
xmlDoc.Load(xmlFilePath);
SignedXml signedXml = new SignedXml(xmlDoc);
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Signature");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("DGICFE", "http://cfe.dgi.gub.uy");

XmlNode certificateNode = xmlDoc.SelectSingleNode("//DGICFE:Caratula/DGICFE:X509Certificate", nsmgr);
if (certificateNode != null)
{
string certificateBase64 = certificateNode.InnerText;
byte[] certificateData = Encoding.UTF8.GetBytes(certificateBase64);
X509Certificate2 dcert2 = new X509Certificate2(certificateData);

foreach (XmlElement element in nodeList)
{
signedXml.LoadXml(element);
signedXml.SigningKey = dcert2.GetRSAPublicKey();
/*in these 3 verifications it returns false*/
bool passes = signedXml.CheckSignature(dcert2, true);
passes = signedXml.CheckSignature(dcert2, false);
passes = signedXml.CheckSignature();

}
}

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

Код: Выделить всё

System.Security.Cryptography.Xml.SignedXml Information: 2 : [SignedXml#00245fb7, BeginCheckSignedInfo] Checking signature in SignedInfo with id. "(null)".
System.Security.Cryptography.Xml.SignedXml Information: 14 : [SignedXml#00245fb7, VerifySignedInfo] Checking SignedInfo using key RSACng#01475d71,
signature description RSAPKCS1SHA1SignatureDescription,
hash algorithm SHA1Cng and asymmetric signature deformatter RSAPKCS1SignatureDeformatter.

System.Security.Cryptography.Xml.SignedXml Verbose: 14 : [SignedXml#00245fb7, VerifySignedInfo] Actual hash value: 8247f7f76542509039de0f38150e4878250e51
System.Security.Cryptography.Xml.SignedXml Verbose: 14 : [SignedXml#00245fb7, VerifySignedInfo] Raw signature: 91ef1705f3de4f83b310ae5e9f1089ea72b7ebb7d2f51171d34ed8cbe03c340cf5f9c3c87
System.Security.Cryptography.Xml.SignedXml Information: 12 : [SignedXml#00245fb7, VerificationFailure] Failed to verify SignedInfo.
Выполните тесты с различными платформами .net 3.0,3.5,4.0... до 4.8 и .Net core 6, результат тот же.
Я рассмотрел подобные вопросы, и ни одно из предложенных решений мне не помогло.
Тестовый XML проверен, то есть имеет действительные подписи... Прикрепляю скриншот XML что я проверяю
Пожалуйста, не могли бы вы помочь мне, указав, что может быть не так в коде или что еще я могу проверить?

Подробнее здесь: https://stackoverflow.com/questions/786 ... turn-false
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»