Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2008(UTC) Сообщений: 22 Откуда: Смоленск
Сказал(а) «Спасибо»: 4 раз
|
Здравствуйте. Сделал отсоединенную подпись с помощью 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? Она же все равно должна здесь проверяться? Может у меня в коде где-то ошибка? Подскажите, в какую сторону копать. Спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Здравствуйте.
Приложите подпись или в ЛС пришлите. |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: commander Дело ведь не в том, что подпись получается в формате CAdES BES? Она же все равно должна здесь проверяться? Может у меня в коде где-то ошибка? В большинстве случаев да, сейчас пишут PKCS7, а по факту CMS. Однако хотелось бы обратить внимание что для плагина константы PKCS7 и CADES-BES разные, поэтому разница все же есть и получается как раз не CADES-BES, это может влиять на проверку. Попробуйте в плагине при создании указать тип CADES-BES, велика вероятность что он подойдет в большинстве случаев где указано PKCS7/CMS и будет корректно определяться, где нужен именно CADES-BES. Отредактировано пользователем 17 декабря 2019 г. 5:09:44(UTC)
| Причина: Не указана
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2008(UTC) Сообщений: 22 Откуда: Смоленск
Сказал(а) «Спасибо»: 4 раз
|
Андрей Писарев написал:Через плагин нельзя создать PKCS#7. Cпасибо за CryptExpert. Т.е. подпись, полученную из плагина, нельзя будет использовать в СМЭВ, МЭДО и остальных случаях, где требуется PKCS#7? Может после подписания в плагине подпись PKCS#7 можно как-нибудь собрать руками? two_oceans написал:Попробуйте в плагине при создании указать тип CADES-BES, велика вероятность что он подойдет в большинстве случаев где указано PKCS7/CMS и будет корректно определяться, где нужен именно CADES-BES. Это я пробовал, подпись все равно не проверяется. Или я не нашел, где можно проверить подпись такого формата. Проверка через CryptExpert тоже показывает "Подпись не верна (2148077575) - Неправильное значение хеша". Прилагаю подписываемый файл "1.txt" и примеры подписей. 1.TXT (1kb) загружен 7 раз(а). CADESCOM_PKCS7_TYPE.p7b (7kb) загружен 4 раз(а). CADESCOM_CADES_BES.p7b (7kb) загружен 3 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Хеш неправильный. У файла - 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) загружен 53 раз(а). |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Для самопроверки - можно через пример подписания файла - указать 1.txt и подписать (т.к. сертфикат ГОСТ 2001 - его выбирать), получаем при проверке тот же хеш (внутри ASN.1): Snimok ehkrana ot 2019-12-17 11-49-19.png (7kb) загружен 33 раз(а). |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
cadesplugin.CADESCOM_PKCS7_TYPE заменить на CADES BES |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2008(UTC) Сообщений: 22 Откуда: Смоленск
Сказал(а) «Спасибо»: 4 раз
|
Автор: Андрей Писарев Хеш неправильный. Да, почему-то неправильный. Но почему так получается? Ведь 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 тоже правильно, иначе она бы вообще не проверялась.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
на тестовой страничке попробовал, у меня работает корректно, хеш правильный и в стороннем ПО проверяется, вот участок: Код:
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;
}
}
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close