|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Здравствуйте. Мне надо сделать цифровую подпись для XML и получить результирующий файл с включенной подписью. Есть итоговый готовый файл, который делается средствами сторонней программы, я пытаюсь повторить. Подписывание получается, но внешний вид - нет :( Вот как надо: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
Во-первых, само тело ХМЛя - с отступами, а ХМЛ цифровой подписи без отступов. Как так можно сделать в одном документе? Во-вторых, каждый элемент цифровой подписи идет с префиксом пространства имен, в том числе и самый первый член, в котором это пространство задается (<ds:Signature xmlns:ds=" http://www.w3.org/2000/09/xmldsig#">). Как делается такое? Пробовал при импорте подписи устанавливать префикс: Код: vbnet 1. 2. 3. 4.
в результате первая строка получается такой как надо Код: xml 1.
(и опять таки с пробелом, собака), а остальные все равно без префикса "ds:" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2013, 23:44 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
ДиамВо-первых, само тело ХМЛя - с отступами, а ХМЛ цифровой подписи без отступов. Как так можно сделать в одном документе? Отформатировать документ с импортированной нодой подписи через XmlWriter не судьба? ДиамВо-вторых, каждый элемент цифровой подписи идет с префиксом пространства имен, в том числе и самый первый член, в котором это пространство задается (<ds:Signature xmlns:ds=" http://www.w3.org/2000/09/xmldsig#">). Как делается такое? А зачем вам этот префикс? У ноды сигнатуры объявлен неймспейс по умолчанию, все дочерние ноды без префиксов принадлежат этому неймспейсу. Вы хотите в ноду с подписью внедрить еще какие-то элементы не из http://www.w3.org/2000/09/xmldsig# ? Диам(и опять таки с пробелом, собака) Этот пробел не влияет на цифровую подпись. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 07:20 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
ДиамМне надо сделать цифровую подпись для XML и получить результирующий файл с включенной подписью. А с чего вы взяли, что при ЭЦП сама подпись включается как нода в подписываемый XML документ? Более того, делать подпись зависимой от форматирования - это неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 10:45 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Arm79, Включается, если её вставляют в документ - почему бы, собственно, и нет? На msdn есть пример на эту тему именно с включением подписи в сам документ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:22 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Пример можно? Просто бессмысленно. Подпись, включаемая как элемент подписанного сообщения, портит само сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:38 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
А с чего вы взяли, что при ЭЦП сама подпись включается как нода в подписываемый XML документ? Почитал документацию, и кроме того, я привел образец, в котором подпись вставлена в документ. Вы читали мое первое сообщение? Прежде чем делать подписывание я почитал документацию (худо бедно, может чего недопонял, но почитал), теперь спрашиваю. В одной из статей говорилось о важности сохранения форматирования у отправителя и получателя, т.к. если формирование одинаковых узлов у нас будет происходить по разному, то и подпись проверку не пройдет. Вообще, я хотел бы оставить в стороне разговор именно о правильности подписывания. Даже если я делаю это неправильно, меня интересуют те вопросы, которые я задал в первом посте. Как же все таки импортировать узел, чтобы в нем были все узлы с префиксами? Может быть это как-то можно задать в объекте SignedXml ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:57 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
ДиамА с чего вы взяли, что при ЭЦП сама подпись включается как нода в подписываемый XML документ? Что значит, с чего? С вашего же примера. ДиамПрежде чем делать подписывание я почитал документацию (худо бедно, может чего недопонял, но почитал), теперь спрашиваю. Судя по всему, немного недопоняли. ЭЦП по сути своей - хэш-функция от набора байтов. Что этот набор из себя представляет - неважно. Поэтому как вариант: вам нужно взять оригинальный XML-документ и сохранить его (превратить в байты). по этим байтам вы получаете подпись (как приплюсованную к оригинальному набору байтов, так и отсоединенную). Затем создаете новый XML-документ, в который и добавляете все нужное (оригинальный набор байтов, цифровые подписи, используемые для проверки сертификаты, и так далее), используя base64 Для наглядности можете продублировать поля исходного XML-документа, но только для наглядности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:43 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Arm79Пример можно? http://msdn.microsoft.com/en-us/library/ms229745(v=vs.110).aspx Arm79Просто бессмысленно. Подпись, включаемая как элемент подписанного сообщения, портит само сообщение. Смысл вполне есть - при включении вместе с подписью открытого ключа адресат имеет возможность сразу же верифицировать полученные данные. А вы теперь объясните, что значит "портит само сообщение". Arm79В одной из статей говорилось о важности сохранения форматирования у отправителя и получателя, т.к. если формирование одинаковых узлов у нас будет происходить по разному, то и подпись проверку не пройдет. Говорят, в Москве кур доят. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Диам Как же все таки импортировать узел, чтобы в нем были все узлы с префиксами? Может быть это как-то можно задать в объекте SignedXml ? Неистребима всё же любовь к изобретению собственных велосипедов с квадратными колесами. Через SignedXml - никак: http://stackoverflow.com/questions/12219232/xml-signature-ds-prefix Если вам действительно нечего делать - рекурсия либо XPath для выбора всех нод узла подписи, и всем полченным нодам указать префикс. Типа такого: Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:44 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Arm79Поэтому как вариант: вам нужно взять оригинальный XML-документ и сохранить его (превратить в байты). по этим байтам вы получаете подпись Зачем??? Чтобы как раз зависеть форматирования документа? SignedXml вычисляет подпись на основании данных DOM-модели, не по текстовому представлению данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:47 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Интересно, спасибо, буду знать. Правда, сильно неуниверсально, но если пренебречь зависимостью от BCL, выглядит здорово. Сон Веры ПавловныArm79В одной из статей говорилось о важности сохранения форматирования у отправителя и получателя А это откуда? Это к Диам, я такого не писал :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:04 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныЗачем??? Чтобы как раз зависеть форматирования документа? Вы немного увлеклись. Не обязательно XML. Обмениваться можно любыми файлами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:05 |
|
Подписывание XML - ветка подписи в пространстве имен
|
|||
---|---|---|---|
#18+
Arm79А это откуда? Это к Диам, я такого не писал :-) Да, пардон, промахнулся, это к нему. Arm79Вы немного увлеклись. Не обязательно XML. Обмениваться можно любыми файлами. Да я бы тоже использовал здесь что-нибудь типа бинарной сериализации, но вот ТС понадобился именно XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 14:34 |
|
|
start [/forum/topic.php?fid=20&msg=38474415&tid=1403639]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 315ms |
total: | 472ms |
0 / 0 |