.NET не поддерживает нестандартные имена элементов подписи XMLDSIG

Я пытаюсь реализовать отраслевую спецификацию, которая требует использования цифровых подписей в формате 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 ответ

Решение

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

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