Подписание элементов Xml в одном документе разными ключами

Бизнес-сценарий:

  • Обновление может содержать пакеты.
  • Пакет может содержать изменения.
  • Каждый пакет должен быть одобрен кем-то.
  • После утверждения пакет не может быть изменен.

Для выполнения обновление должно иметь 100% утвержденных пакетов.

Соображения по развитию:

  • Все данные сохраняются в виде файлов XML.
  • Элементы Xml «Пакет» будут подписаны после утверждения.

Проблема:

Что бы я ни пытался найти в Google, все примеры всегда связаны с подписанием весь документ или подписывание подэлементов одним и тем же ключом для всего документа. Но я хотел бы подписать каждый подэлемент (Пакет) другим ключом, ключом того, кто одобряет пакет. Поэтому мне нужна одна подпись для каждого элемента. Хотя все функции .NET Framework похоже поддерживают это, я получаю странное поведение. Например, при подписании элементов вам нужно указать URI элемента. Если я даю один и тот же идентификатор всем пакетам, он проверяет, если я даю разные идентификаторы каждому элементу и ссылаюсь на этот идентификатор в своих соответствующих подписях, я могу проверить только первый. Идея идентификатора не имеет смысла для моего сценария, во-первых, потому что у меня есть подпись с моим элементом в отношении 1: 1.

Я могу опубликовать код, но прежде чем я это сделаю, я хотел бы знать, возможно ли что-то подобное? Я не видел ничего, что запрещало бы то, что я хочу делать, но я также не видел никаких указаний на то, что это должно работать. Кто-нибудь сделал это или может кто-нибудь указать мне на ресурс, который я еще не нашел? Или у кого-нибудь есть лучшее представление о том, как реализовать требования с использованием стандартов?


person nvoigt    schedule 10.05.2013    source источник


Ответы (1)


Безусловно, разные элементы в одном и том же XML-документе можно подписывать разными ключами. По сути, это добавляет в документ несколько подписей с разными внутренними ссылками (#<ID>).
Внутренняя ссылка с идентификатором обязательна, ее невозможно обойти, что поддерживается стандартами. Ссылка с пустым или отсутствующим URI не означает, что должен быть подписан родительский элемент, но что должен быть подписан весь документ.
Если вы не можете добавить идентификаторы в свои пакеты, вы Вы можете использовать нестандартные средства для достижения своей цели, эффективно рассматривая каждый пакет как независимый XML-документ и оставляя ссылку URI пустой. Но это будет означать, что ваш XML-документ со всеми пакетами может быть проверен только вашей программой, поскольку перед проверкой ей придется разделить XML-документ на несколько документов.

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

person Daniel Hilgarth    schedule 13.05.2013