Мы проверяем подпись в ответах 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
Ошибка проверки подписи XML с использованием SignedXML ⇐ C#
Место общения программистов C#
-
Anonymous
1764852636
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-actorid-upis%3A%3A0208%3A0468863455/services/busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-2%3A%3AInvoice%23%23urn%3Acen.eu%3Aen16931%3A2017%23compliant%23urn%3Afdc%3Apeppol.eu%3A2017%3Apoacc%3Abilling%3A3.0%3A%3A2.1";
var successUrl = "http://smp.peppol.org/iso6523-actorid-upis%3A%3A9925%3Abe0848934496/services/busdox-docid-qns%3A%3Aurn%3Afdc%3Apeppol%3Aend-user-statistics-report%3A1.1%3A%3AEndUserStatisticsReport%23%23urn%3Afdc%3Apeppol.eu%3Aedec%3Atrns%3Aend-user-statistics-report%3A1.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;
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79823263/xml-signature-validation-failing-using-signedxml[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия