Вопрос

У меня есть 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 (второй случай).

Другие советы

Есть партнер 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

Я надеюсь, что исходный код может вам как-то помочь.

С уважением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top