Добрый день.
На данный момент я реализую интеграцию с Платёжным шлюзом электронного правительства. 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 никак не должно влиять на валидность подписи.
Могу предоставить дополнительную информацию с примерами документов, но только в
личной переписке.
Заранее спасибо.