2012-02-21 9 views
0

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

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

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

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

  1. Использование класса .NET SignedXml Я создаю < DSIG: Подпись > элемент
  2. Я манипулировать DOM, чтобы удалить < DSIG: Подпись > и воссоздают элемент как < myns: ensembleSignature >.

Но, похоже, .NET не может проверить входящие < myns: ensembleSignature >, даже если я переименовать входящий элемент обратно < DSig: Подпись >.

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

ответ

0

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

  1. нагрузки XML в XmlDocument
  2. найти < customSignature XMLNS = "http://b-to-b.com/Namespace">
  3. создать новый элемент < Signature>
  4. движение всех детей < customSignature> to
    • Будьте осторожны, чтобы не мешать пробелу или пространству пространства имен < SignedInfo>.
  5. заменить < customSignature> с < Signature>
  6. проверки подписи с использованием классов .NET SignedXml