Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: angora  Добрый день. Тоже бьемся с подписью XML. Проверка justsign.me говорит что подпись недействительна. GetHashStream взят из приведенных выше примеров кода, разве что константы алгоритмов заменены на PROV_GOST_2012_256 (80) и ALG_SID_GR3411_2012_256 (33)
Далее куски кода взяты миксом из ранее приведенных в треде, и из предоставленного поставщиком услуги файла примера (который кстати проходит валидацию, разве что ругается что сертификат кривой): ... Судя по коду, с каноникализацией там не все гладко, но оригинальный-то файл проверку проходит !
Дайджест проверил, вроде результат как совпадает и с cpverify, и с vipnethashcalc Есть у кого мысли, в чем дело может быть, где нестыковка ? Добрый день. Нестыковок может быть миллион. Пример, который подписан кем-то скорее всего проходил через каноникализацию, а тут в теме в основном все полагаются на то, что каноникализация уже выполнена при генерации кода. У Вас много объявлений пространств в самом конверте - некоторые из них при каноникализации спустятся в Body, причем в разные места. Кроме того, хэш от SignedInfo нигде в файле не фигурирует, но из него идет значение SignatureValue (которое каждый раз разное, то есть проверить простым сравнением не получится) и проблема может оказаться именно в SignedInfo при совпадении хэшей. Или текст может портится уже после того как Вы посчитали хэш утилитами - такое в этой теме тоже было. Приложите пожалуйста файл, который не проходит проверку. По частичному коду вряд ли кто разберет что там вообще происходит, да и собственно само Body не приведено. Ниже отмечу 2 пункта, которые вроде бы и не должны влиять на проверку ЭП, но как информация к размышлению. 1. Особенно мне нравится что Signature с префиксом ds, а ее "внутренности" SignedInfo SignatureValue KeyInfo без префикса (и соответственно с лишним объявлением пространства, обратите внимание что для SignedInfo объявление нужно, но для других пропускается если одинаковый префикс). Ясно, половину скопировали из одного источника, половину из другого. Использование в одной подписи разных префиксов конечно не запрещено (формально не должно повлиять), но сужает количество сервисов в которых файл пройдет проверку, так как некоторые сервисы могут закэшировать префикс от тега Signature (как у меня в программе было раньше) и внезапно не найти нужных "внутренностей" с таким префиксом в подписи. Если Вам прям позарез не надо разные префиксы, постарайтесь не менять их в пределах одной подписи. 2. Интересно что в подписи появился трансформ enveloped-signature. Для справки: подпись в документе xml по положению тега Signature и подписываемого тега может быть enveloped (подпись внутри подписываемого тега), enveloping (подписываемый тег внутри подписи), detached (подпись и подписываемый тег независимы, подпись может быть как в этом же документе, так и в другом). трансформ enveloped-signature удаляет подпись из подписанного тега при проверке. Способ с помещение подписи в тег Security - это вариант detached, при нем не нужен трансформ enveloped-signature (удалять нечего). Это все наводит на мысль, что на самом деле либо а) Вам нужен другой способ прикрепления подписи в Body либо б) трансформ лишний либо в) в документе будет несколько подписей и трансформ удаляет другую подпись. Отредактировано пользователем 25 февраля 2020 г. 8:12:52(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил two_oceans за этот пост.
|
angora оставлено 25.02.2020(UTC)
|