.NET не поддерживает нестандартные имена элементов подписи XMLDSIG - PullRequest
0 голосов
/ 21 февраля 2012

Я пытаюсь реализовать отраслевую спецификацию, которая требует использования цифровых подписей в формате XML (XMLDSIG). Вместо соответствия с примерами (<Signature>) моя спецификация использует свое собственное имя для элемента подписи:

<xs:element name="ensembleSignature" type="dsig:SignatureType" />
<!-- wish this was:  <xs:element ref="dsig:Signature" />  -->

Таким образом, элемент не называется «Подпись» и находится в пространстве имен XML домена вместо пространства имен XML dsig.

Имея много дополнительной работы, я могу создать эту собственную подпись в .NET.

  1. Используя класс .NET SignedXml, я создаю элемент
  2. Я манипулирую DOM, чтобы удалить и воссоздать элемент как .

Но, похоже, .NET не может проверить входящий , даже если я переименую входящий элемент обратно в .

Я много раз изучал спецификацию XMLDSIG, и хотя во всех их примерах используется , похоже, что это имя не требуется специально, даже для преобразований с конвертами. Так это ошибка в SignedXml, что он поддерживает это имя только одного элемента, когда в спецификации XMLDSIG такого требования нет?

1 Ответ

0 голосов
/ 13 марта 2012

Использование нестандартного имени элемента в .NET невозможно.Но имя элемента подписи не является частью дайджеста, поэтому вы можете удалить «настраиваемый» элемент подписи и добавить «стандартное» имя элемента подписи (), но будьте осторожны, чтобы не изменить какие-либо пробелы или пространства имен в SignedInfoэлемент, потому что SignedInfo IS часть дайджеста.В методе канонизации, который я использую, пробел имеет большое значение, как и пространство имен элементов.

  1. загрузка XML в XmlDocument
  2. find
  3. создать новый элемент
  4. переместить все дочерние элементы в
    • Будьте осторожны, чтобы не нарушить контекст пробелов или пространства имен .
  5. заменить на
  6. проверить подпись с помощью .NET SignedXml class
...