Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

5 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline commander  
#1 Оставлено : 16 декабря 2019 г. 16:29:55(UTC)
commander

Статус: Участник

Группы: Участники
Зарегистрирован: 16.12.2008(UTC)
Сообщений: 22
Откуда: Смоленск

Сказал(а) «Спасибо»: 3 раз
Здравствуйте.
Сделал отсоединенную подпись с помощью Browser plug-in, вот часть моего кода:

Код:
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
yield oSigner.propset_Certificate(oCertificate);
yield oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
yield oSignedData.propset_ContentEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;
yield oSignedData.propset_Content(dataToSign);
var sSignedMessage = yield oSignedData.SignCades(oSigner, cadesplugin.CADESCOM_PKCS7_TYPE, true); //(отсоединенная)


Передаю в качестве dataToSign "SGVsbG8gV29ybGQ=" (это текст "Hello World" в BASE64). Все подписывается без ошибок, возвращается кодированная в BASE64 подпись, я ее раскодирую из BASE64 и сохраняю в файл.
Когда я сам проверяю эту подпись через oSignedData.VerifyCades - ошибок нет, а когда пробую проверить, например, здесь https://www.justsign.me/verifyqca/Verify/ получаю (выбираю "Подпись в формате CMS", это правильно?):
Результат проверки Подпись не действительна
Не удалось проверить подпись CAdES-BES. Ошибка: [Неправильное значение хеша]. Код: [0x80091007].Сообщение содержит неверную подпись.

Проверка здесь https://www.gosuslugi.ru/pgu/eds/order тоже показывает "Электронная подпись недействительна".
Где еще можно проверить мою подпись, чтобы узнать, все ли я делаю правильно?
Дело ведь не в том, что подпись получается в формате CAdES BES? Она же все равно должна здесь проверяться?
Может у меня в коде где-то ошибка?
Подскажите, в какую сторону копать. Спасибо.
Offline Андрей Писарев  
#2 Оставлено : 16 декабря 2019 г. 18:36:12(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Здравствуйте.

Приложите подпись или в ЛС пришлите.
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#3 Оставлено : 17 декабря 2019 г. 5:03:15(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Автор: commander Перейти к цитате
Дело ведь не в том, что подпись получается в формате CAdES BES? Она же все равно должна здесь проверяться?
Может у меня в коде где-то ошибка?
В большинстве случаев да, сейчас пишут PKCS7, а по факту CMS. Однако хотелось бы обратить внимание что для плагина константы PKCS7 и CADES-BES разные, поэтому разница все же есть и получается как раз не CADES-BES, это может влиять на проверку. Попробуйте в плагине при создании указать тип CADES-BES, велика вероятность что он подойдет в большинстве случаев где указано PKCS7/CMS и будет корректно определяться, где нужен именно CADES-BES.

Отредактировано пользователем 17 декабря 2019 г. 5:09:44(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
commander оставлено 17.12.2019(UTC)
Offline Андрей Писарев  
#4 Оставлено : 17 декабря 2019 г. 9:46:22(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Здравствуйте.

Через плагин нельзя создать PKCS#7.
Техническую поддержку оказываем тут
Наша база знаний
Offline commander  
#5 Оставлено : 17 декабря 2019 г. 10:36:44(UTC)
commander

Статус: Участник

Группы: Участники
Зарегистрирован: 16.12.2008(UTC)
Сообщений: 22
Откуда: Смоленск

Сказал(а) «Спасибо»: 3 раз
Андрей Писарев написал:
Через плагин нельзя создать PKCS#7.

Cпасибо за CryptExpert.
Т.е. подпись, полученную из плагина, нельзя будет использовать в СМЭВ, МЭДО и остальных случаях, где требуется PKCS#7? Может после подписания в плагине подпись PKCS#7 можно как-нибудь собрать руками?

two_oceans написал:
Попробуйте в плагине при создании указать тип CADES-BES, велика вероятность что он подойдет в большинстве случаев где указано PKCS7/CMS и будет корректно определяться, где нужен именно CADES-BES.

Это я пробовал, подпись все равно не проверяется. Или я не нашел, где можно проверить подпись такого формата.
Проверка через CryptExpert тоже показывает "Подпись не верна (2148077575) - Неправильное значение хеша".
Прилагаю подписываемый файл "1.txt" и примеры подписей.
1.TXT (1kb) загружен 6 раз(а). CADESCOM_PKCS7_TYPE.p7b (7kb) загружен 3 раз(а). CADESCOM_CADES_BES.p7b (7kb) загружен 2 раз(а).
Offline Андрей Писарев  
#6 Оставлено : 17 декабря 2019 г. 10:45:37(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Хеш неправильный.

У файла -
75ED15D84DF84291C67FE07BF234AC69E92A9C2A378EE62F342AF739E829EBA9

А внутри подписей:
34 F0 EE E9 8B B7 7B E9 3F 00 8E FD F3 7B CD 5F
93 4B A0 E1 5C 93 9F 2A 17 2F A7 23 34 1E 99 1E

Snimok ehkrana ot 2019-12-17 11-45-10.png (42kb) загружен 41 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
commander оставлено 17.12.2019(UTC)
Offline Андрей Писарев  
#7 Оставлено : 17 декабря 2019 г. 10:50:10(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Для самопроверки - можно через пример подписания файла - указать 1.txt
и подписать (т.к. сертфикат ГОСТ 2001 - его выбирать), получаем при проверке тот же хеш (внутри ASN.1):

Snimok ehkrana ot 2019-12-17 11-49-19.png (7kb) загружен 28 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#8 Оставлено : 17 декабря 2019 г. 10:51:12(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
cadesplugin.CADESCOM_PKCS7_TYPE заменить на CADES BES
Техническую поддержку оказываем тут
Наша база знаний
Offline commander  
#9 Оставлено : 17 декабря 2019 г. 13:20:27(UTC)
commander

Статус: Участник

Группы: Участники
Зарегистрирован: 16.12.2008(UTC)
Сообщений: 22
Откуда: Смоленск

Сказал(а) «Спасибо»: 3 раз
Автор: Андрей Писарев Перейти к цитате
Хеш неправильный.

Да, почему-то неправильный.
Но почему так получается?
Ведь dataToSign перед подписанием точно SGVsbG8gV29ybGQ=
Несколько раз проверил:
Код:
yield oSignedData.propset_ContentEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;
yield oSignedData.propset_Content(dataToSign);
alert("dataToSign="+dataToSign);
var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);

Я же все правильно написал, чтобы dataToSign ожидалась в Base64?
Раскодирую подпись из Base64 тоже правильно, иначе она бы вообще не проверялась.
Offline Андрей Писарев  
#10 Оставлено : 17 декабря 2019 г. 13:32:06(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
на тестовой страничке попробовал, у меня работает корректно, хеш правильный и в стороннем ПО проверяется,
вот участок:

Код:

 var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
      
                yield oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);
                yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); //
               
			 
                yield oSignedData.propset_Content(dataToSign);// dataToSign = в base64

                try {
                    Signature = yield oSignedData.SignCades(oSigner, cadesplugin.CADESCOM_CADES_BES, detached);
                }
                catch (err) {
                    errormes = "Не удалось создать подпись из-за ошибки: " + cadesplugin.getLastError(err);
                    throw errormes;
                }
            }
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
commander оставлено 17.12.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
5 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.