Ошибка проверки подписи XML с использованием SignedXMLC#

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

Сообщение Anonymous »

Мы проверяем подпись в ответах XML (для Peppol).
Для этого мы используем класс SignedXml (System.Security.Cryptography.Xml) в C#. В большинстве случаев это работает нормально.
Для некоторых ответов XML проверка с использованием SignedXML не удалась. Разница между неудачными и неудачными, по-видимому, заключается в использовании префиксов динамических пространств имен (ns1-ns5).
Когда мы используем онлайн-инструмент Chillkat для проверки, они проверяют его как действительный https://tools.chilkat.io/xmlDsigVerify
Ниже представлена упрощенная реализация нашего кода, а также 1 успешный и 1 неудачный (публичный) URL-адрес.
Кто-нибудь знает, как решить эту проблему, используя класс SignedXml?
internal class Program
{
static async Task Main()
{
var failingUrl = "http://smp.peppol.comax.be/iso6523-acto ... 0%3A%3A2.1";
var successUrl = "http://smp.peppol.org/iso6523-actorid-u ... 1%3A%3A1.1";

await Validate(failingUrl);
await Validate(successUrl);

async Task Validate(string url)
{
try
{
var content = await new HttpClient().GetStringAsync(url);

var xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;
xmlDocument.LoadXml(content);

// Validate the XML signature
bool isValid = ValidateXmlSignature(xmlDocument);

if(isValid)
{
Console.WriteLine("✓ XML signature is VALID");
}
else
{
Console.WriteLine("✗ XML signature is INVALID");
}
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}
}

static bool ValidateXmlSignature(XmlDocument xmlDoc)
{
// Find the Signature element in the XML document
var signatureNode = xmlDoc.GetElementsByTagName("Signature", "http://www.w3.org/2000/09/xmldsig#");

if(signatureNode.Count == 0)
{
Console.WriteLine("No signature found in the XML document.");
return false;
}

try
{
// Load the signature
var signedXml = new SignedXml(xmlDoc);
signedXml.LoadXml((XmlElement)signatureNode[0]);

// Verify the signature
bool isValid = signedXml.CheckSignature();

return isValid;
}
catch (Exception ex)
{
Console.WriteLine($"Error during signature validation: {ex.Message}");
return false;
}
}
}


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

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

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

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

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

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