2

У меня есть документ XML, имеющий структуру, подобную следующейцифровой подписи Части документа XML

<envelop> 
    <header>blaa</header> 
    <message>blaa blaa</message> 
    <footer></footer> 
</envelop> 

Я хочу использовать цифровую подпись элементы заголовка и сообщения и добавить подпись к элементу колонтитула.

Как я могу подписать элементы, а затем проверить подпись (используя .net C#)?

ответ

3

Вы должны быть в состоянии добавить XPath-преобразование в подписи. Это должно выглядеть примерно так:

 <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> 
     <XPath xmlns:dsig="&dsig;"> 
     ... 
     </XPath> 
     </Transform> 

Я не владеет в XPath, но это должно быть легко сформулировать XPath-выражение, которое исключает Footer-элемент. (Но учтите, что 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> 

вы могли бы справиться с этим с помощью окутан Подпись Transform (первый случай), либо подписав элемент signedEnvelope (второй случай).

+0

Привет, Rasmus, у меня нет возможности реструктурировать xml, так как формат определяется сторонним приложением. Я рассмотрю трансформацию XPath. Спасибо – Eros

2
+1

ссылка объясняет, как вы можете подписать весь документ (установка свойства Uri на "").Как я могу расширить это, чтобы частично подписать элементы xml, а затем проверить подпись? – Eros

0

Почему не следует 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 - я думаю, что это avalible в C#.

0

Я вижу, что это сообщение устарело, но, возможно, кому-то сейчас нужна такая же потребность. То, что вам нужно, так или иначе похоже на огибающую подпись в XMLDSIG. Разница в том, что в XMLDSIG вы должны включить данные подписи в узел Signature.

Если вы хотите сделать это, вы должны реализовать его самостоятельно.

Я участвую в проекте по разработке библиотеки для поддержки XAdES для .NET Framework.

Мы только что выпустили версию 1.0, которая обеспечивает раннюю поддержку XAdES-BES.

Вы можете найти его в XAdES .NET Project

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

С уважением.

2

Существует партнер Microsoft, который может быть очень хорош для этого. Они позволяют добавлять digital signatures для XML (а также для всех других платформ). Я рекомендую проверить их продукт, он называется cosign.

Смежные вопросы