Сообщение
  • Пожалуйста, прежде пройдите авторизацию

Проблема с каноникализацией XML-подписи Калкан
(1 чел.) (1) гость
  • Страница:
  • 1

ТЕМА: Проблема с каноникализацией XML-подписи Калкан

Проблема с каноникализацией XML-подписи Калкан 3 года, 2 мес. назад #2300

  • ykurmangaliyev
  • Новый участник
  • Постов: 2
  • Репутация: 0
Добрый день.

На данный момент я реализую интеграцию с Платёжным шлюзом электронного правительства. XML-документы, отправляемые туда, подписываются с помощью Kalkan SDK 2.0.
Возникла проблема - подпись не проходит верификацию на стороне ПШЭП после каноникализации.

С этой проблемой мы обратились в АО "НИТ". Они, в свою очередь, нас направили к вам.

Собственно, техническое описание проблемы следующее:
Взяли XML документ, подписали его с помощью Kalkan, получился документ с подписью наподобие этой:

...
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost34310-gost34311"/>
<ds:Reference>
...


Каноникализировали её, убрав все лишние (структурные) пробелы, и подпись приняла следующий вид:

...
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost34310-gost34311"/><ds:Reference>
...


Теперь оборачиваем этот документ в SOAP, отправляем в ПШЭП и получаем "Xml verification failed". Если бы отправили в не-каноничном, то есть том виде, в котором изначально был документ, то получили бы успешный ответ.
На своей стороне мы не можем отключить автоматическую каноникализацию.

На сколько я знаю, любой XML-документ при подписании и верификации проходит каноникализацию, в соответствии с алгоритмом, указанным в тэге CanonicalizationMethod. Таким образом, изменение структуры XML никак не должно влиять на валидность подписи.

Могу предоставить дополнительную информацию с примерами документов, но только в личной переписке.
Заранее спасибо.
Изменено: 3 года, 2 мес. назад от ykurmangaliyev.

Re: Проблема с каноникализацией XML-подписи Калкан 3 года, 2 мес. назад #2313

  • ololo
  • Живу я здесь
  • Постов: 464
  • Репутация: 57
Добрый день.
Канонизация - это не удаление пробелов и переносов строк. Так вы меняете документ, соответственно хэши будут различаться. Если вы хотите их удалить, то это надо делать до подписи, но никак не после.
gg wp

Re: Проблема с каноникализацией XML-подписи Калкан 3 года, 2 мес. назад #2317

  • ykurmangaliyev
  • Новый участник
  • Постов: 2
  • Репутация: 0
Спасибо за ответ. Я понимаю, что у разных строк разных хэши. Однако, я всегда считал, что для того и есть тэг CanonicalizationMethod, чтобы исключить такие ситуации - XML-документы канонизируются перед подписью и проверкой подписи. То есть, в DigestValue хранится не хэш документа, а хэш документа в каноничном виде. Таким образом, если я и вношу не затрагивающие данные изменения в документ, то перед проверкой подписи документ канонизируется, получается та же строка, а значит тот же хэш. То есть, любые два логически эквивалентных документа будут иметь одинаковые хэши.

Re: Проблема с каноникализацией XML-подписи Калкан 3 года, 2 мес. назад #2319

  • ololo
  • Живу я здесь
  • Постов: 464
  • Репутация: 57
Канонизация не удаляет переносы строк, она лишь нормализует XML. Эти правила описаны в рекомендациях.
www.w3.org/TR/xml-c14n#Example-WhitespaceInContent
gg wp
  • Страница:
  • 1
FaLang translation system by Faboba