Цифровая подпись частей XML-документа
-
06-07-2019 - |
Вопрос
У меня есть XML-документ, имеющий структуру, аналогичную следующей
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<footer></footer>
</envelop>
Я хочу подписать элементы заголовка и сообщения цифровой подписью и добавить подпись к элементу нижнего колонтитула.
Как я могу подписать элементы, а затем позже проверить подпись (используя .net c #)?
Решение
Вы должны иметь возможность добавить XPath-преобразование к Подписи.Это должно выглядеть примерно так:
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<XPath xmlns:dsig="&dsig;">
...
</XPath>
</Transform>
Я не свободно владею XPath, но должно быть легко сформулировать XPath-выражение, которое исключает элемент нижнего колонтитула.(Но обратите внимание, что XPath является необязательной частью XML-DSIG, поэтому не все реализации могут его поддерживать).
В качестве альтернативы, если бы вы могли реструктурировать свой документ таким образом, чтобы он был
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<Signature></Signature>
</envelop>
или
<envelop>
<signedEnvelope>
<header>blaa</header>
<message>blaa blaa</message>
</signedEnvelope>
<Signature></Signature>
</envelop>
вы могли бы справиться с этим, используя преобразование заключенной подписи (первый случай) или подписав элемент signedEnvelope (второй случай).
Другие советы
Прочитайте это http://msdn.microsoft.com/en-us /library/ms229745.aspx р>
Есть партнер Microsoft, который может быть очень хорош для этого. Они позволяют добавлять цифровые подписи для XML (как и для всех других платформ). Я рекомендую проверить их продукт, он называется cosign.
Почему бы не следовать рекомендациям w3 для подписи XML http://www.w3.org/ 2000/09 / xmldsig # имеет базовую структуру:
<Signature>
<SignedInfo>
<SignatureMethod />
<CanonicalizationMethod />
<Reference>
<Transforms>
<DigestMethod>
<DigestValue>
</Reference>
<Reference /> etc.
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
Если вам нужны более продвинутые функции, прочитайте о XAdES - я думаю, что он доступен в C #.
Я вижу, что этот пост старый, но, возможно, у кого-то сейчас есть такая же потребность.То, что вам нужно, каким-то образом похоже на обернутую подпись в XMLDSIG.Разница в том, что в XMLDSIG вы должны включить данные подписи в Подпись узел.
Если вы хотите это сделать, вы должны реализовать это самостоятельно.
Я участвую в проекте по разработке библиотеки для обеспечения поддержки XAdES для .NET Framework.
Мы только что выпустили версию 1.0, которая обеспечивает раннюю поддержку XAdES-BES.
Вы можете найти это в Проект XAdES .NET
Я надеюсь, что исходный код может вам как-то помочь.
С уважением.