Статус: Участник
Группы: Участники
Зарегистрирован: 14.01.2018(UTC) Сообщений: 24 Откуда: SPB Сказал(а) «Спасибо»: 18 раз
|
Добрый день. Не могу до конца понять, что не так делаю. Есть на сервере файл. Получаю хеш значение файла алгоритмом JCP.GOST_EL_2012_512_NAME и передаю клиенту. На клиенте: Конвертирую хеш значение в Base64 строку. Подписываю эту Base64 строку. Сертификат: Алгоритм ключа: ГОСТ Р 34.10-2012 512 бит Криптопровайдер: Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider Получаю результат. В консоли вывожу Signature. Сохраняю его как sig файл. Проверяю на госуслугах (Подтверждение подлинности ЭП электронного документа. ЭП — отсоединенная, в формате PKCS#7 по значению хэш-функции) - сертификат показывается, но подпись ЭП - не верна. Не могли бы помочь подсказать, что не так? Спасибо. Ниже код функции, который взят из примеров КрипоПро: Код:
function SignCadesBES_Async(certListBoxId, data, setDisplayData) {
cadesplugin.async_spawn(function*(arg) {
var e = document.getElementById(arg[0]);
var selectedCertID = e.selectedIndex;
if (selectedCertID == -1) {
alert("Select certificate");
return;
}
var certificate = global_selectbox_container[selectedCertID];
var dataToSign = Base64.encode(data);
var Signature;
try
{
var errormes = "";
try {
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
} catch (err) {
errormes = "Failed to create CAdESCOM.CPSigner: " + err.number;
throw errormes;
}
var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
yield oSigningTimeAttr.propset_Name(cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
var oTimeNow = new Date();
yield oSigningTimeAttr.propset_Value(oTimeNow);
var attr = yield oSigner.AuthenticatedAttributes2;
yield attr.Add(oSigningTimeAttr);
var oDocumentNameAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
yield oDocumentNameAttr.propset_Name(cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME);
yield oDocumentNameAttr.propset_Value("Document Name");
yield attr.Add(oDocumentNameAttr);
if (oSigner) {
yield oSigner.propset_Certificate(certificate);
}
else {
errormes = "Failed to create CAdESCOM.CPSigner";
throw errormes;
}
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
if (dataToSign) {
// Данные на подпись ввели
yield oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);
yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); //
// if(typeof(setDisplayData) != 'undefined')
// {
// //Set display data flag flag for devices like Rutoken PinPad
// yield oSignedData.propset_DisplayData(1);
// }
yield oSignedData.propset_Content(dataToSign);
try {
Signature = yield oSignedData.SignCades(oSigner, cadesplugin.CADESCOM_CADES_BES, true);
// Signature = yield oSignedData.SignHash(oHashedData, oSigner, CADESCOM_CADES_BES);
}
catch (err) {
errormes = "Не удалось создать подпись из-за ошибки: " + cadesplugin.getLastError(err);
throw errormes;
}
}
// document.getElementById("SignatureTxtBox").innerHTML = Signature;
// SignatureFieldTitle[0].innerHTML = "Подпись сформирована успешно:";
console.log("Signature ", Signature);
console.log("Signature decoded ", Base64.decode(Signature));
}
catch(err)
{
// SignatureFieldTitle[0].innerHTML = "Возникла ошибка:";
// document.getElementById("SignatureTxtBox").innerHTML = err;
console.error("Error in Signature creation: ", err);
}
}, certListBoxId); //cadesplugin.async_spawn
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 495 раз Поблагодарили: 2035 раз в 1579 постах
|
Здравствуйте.
1. На сайте заяввлена поддержка 2012? 2. Можете приложить то, что отправляете (в архиве) или прислать для анализа в ЛС? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 495 раз Поблагодарили: 2035 раз в 1579 постах
|
по п1. - вопрос снят, проверяется. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 495 раз Поблагодарили: 2035 раз в 1579 постах
|
Автор: ivar.mikhailovich Есть на сервере файл. Получаю хеш значение файла алгоритмом JCP.GOST_EL_2012_512_NAME и передаю клиенту.
На клиенте: Конвертирую хеш значение в Base64 строку. Подписываю эту Base64 строку. Сертификат: Алгоритм ключа: ГОСТ Р 34.10-2012 512 бит Криптопровайдер: Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider Получаю результат. В консоли вывожу Signature. Сохраняю его как sig файл. Проверяю на госуслугах (Подтверждение подлинности ЭП электронного документа. ЭП — отсоединенная, в формате PKCS#7 по значению хэш-функции) - сертификат показывается, но подпись ЭП - не верна. Не могли бы помочь подсказать, что не так?
На гос.услуги нужно тогда передавать не файл, а строку с хешем (в файле, до кодирования в base64). SignCades - подписывает хеш вычисленный внутри для переданных данных. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.01.2018(UTC) Сообщений: 24 Откуда: SPB Сказал(а) «Спасибо»: 18 раз
|
Я так и делаю на госуслугах. Передаю хеш до base64 и файл уже с подписью. Госуслуги говорит что ЭП не верна .
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 495 раз Поблагодарили: 2035 раз в 1579 постах
|
Автор: ivar.mikhailovich Я так и делаю на госуслугах. Передаю хеш до base64 и файл уже с подписью. Госуслуги говорит что ЭП не верна . Портал ждет хеш от файла и подпись к файлу. Если вычислять хеш, а потом его же передавать в SignCades - будет внутри вычислен хеш от переданных данных (т.е. от хеша) и уже внутренний хеш - будет подписываться (а точнее - структура с атрибутами) Портал извлекает из CMS (sig файла) значение хеша (из ASN.1) и сравнивает его с тем, что ввели в поле ввода (hex вариант) = хеш от файла. |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 495 раз Поблагодарили: 2035 раз в 1579 постах
|
На клиенте вызвать SetHashValue (хеш от файла, рассчитанный на сервере) |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.01.2018(UTC) Сообщений: 24 Откуда: SPB Сказал(а) «Спасибо»: 18 раз
|
Автор: Андрей Писарев На клиенте вызвать SetHashValue (хеш от файла, рассчитанный на сервере) Спасибо. Попробую.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.01.2018(UTC) Сообщений: 24 Откуда: SPB Сказал(а) «Спасибо»: 18 раз
|
Спасибо. Все работает. На госуслугах - проверяется.
Только момент есть. Я так понимаю что алгоритм сертификата и алгоритм генерации хеша на сервере - должны совпадать?
Спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 495 раз Поблагодарили: 2035 раз в 1579 постах
|
Автор: ivar.mikhailovich Я так понимаю что алгоритм сертификата и алгоритм генерации хеша на сервере - должны совпадать? Верно. Пример файла с подписью: Пример, хеш: szOID_CP_GOST_R3411_12_512="1.2.643.7.1.1.2.3" // Функция хэширования ГОСТ Р 34.11-2012, длина выхода 512 бит Значение хеша: Цитата: 1663 12: SEQUENCE { 1665 8: Алгоритм: OBJECT IDENTIFIER '1 2 643 7 1 1 2 3' 1675 0: NULL : } 1677 561: [0] { 1681 24: SEQUENCE { 1683 9: OBJECT IDENTIFIER contentType (1 2 840 113549 1 9 3) 1694 11: SET { 1696 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1) : } : } 1707 28: SEQUENCE { 1709 8: OBJECT IDENTIFIER '1 2 643 2 45 1 1 2' 1719 16: SET { 1721 14: BMPString '** . h a s h ' : } : } 1737 28: SEQUENCE { 1739 9: OBJECT IDENTIFIER signingTime (1 2 840 113549 1 9 5) 1750 15: SET { 1752 13: UTCTime 12/10/2018 16:58:00 GMT : } : } 1767 44: SEQUENCE { 1769 8: OBJECT IDENTIFIER '1 2 643 3 182 1 3' 1779 32: SET { 1781 30: BMPString '****************** ' : } : } 1813 79: SEQUENCE { 1815 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4) 1826 66: SET { 1828 64: OCTET STRING значение хеша: : 0C 3D 3B 6A B7 0A 78 52 AD EB B5 A3 AE EA 76 65 : C7 53 7F 2F E1 C8 4A 94 AC CD 87 7B C4 34 38 99 : BE F3 29 8F D8 68 E8 50 C8 98 D4 69 B3 E6 7F 91 : 6F E6 94 86 75 58 AB 18 88 C7 91 23 78 AD D2 17 : }
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close