Статус: Новичок
Группы: Участники
Зарегистрирован: 25.07.2017(UTC) Сообщений: 3
|
Добрый день! Реализуем систему электронного документооборота с функцией электронной подписи. Для этих целей был выбран CryptoPro Browser Plugin Смысл задачи: загрузить файл на сервер и все участники процесса его подписывают. Делаю это примерно так: 0. Файл загружается на сервер. 1. Генерируется хеш файла по ГОСТ алгоритму (непринципиально пока 34.11-94 или 34.11-2012) 2. Далее каждый, кто должен подписать документ подписывает не сам документ, а сформированный хеш методом SignHash с параметром отделенной подписи. 3. Файлы отделенных подписей сохраняются. Если все так, то помогите разобраться с нюансами, т.к. подпись формируется, но в совокупности с файлом не проверяется. Исходники: Код:
function InitializeHashedData(hashAlg, sHashValue) {
// Создаем объект CAdESCOM.HashedData
var oHashedData = cadesplugin.CreateObject("CAdESCOM.HashedData");
// Инициализируем объект заранее вычисленным хэш-значением
// Алгоритм хэширования нужно указать до того, как будет передано хэш-значение
oHashedData.Algorithm = hashAlg;
//console.log(sHashValue);
//oHashedData.DataEncoding = CADESCOM_BASE64_TO_BINARY;
//oHashedData.Hash(dataToSign); // dataToSign - это строка base64
oHashedData.SetHashValue(sHashValue);
return oHashedData;
}
function CreateSignature(oCertificate, oHashedData) {
// Создаем объект CAdESCOM.CPSigner
var oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
oSigner.Certificate = oCertificate;
// Создаем объект CAdESCOM.CadesSignedData
var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
var sSignedMessage = "";
// Вычисляем значение подписи
try {
sSignedMessage = oSignedData.SignHash(oHashedData, oSigner, CADESCOM_CADES_BES);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
return;
}
return sSignedMessage;
}
Вызываются вышеуказанные функции так: Код:
//sHashValue - параметр в функции, хеш получается на этапе загрузки и проверялся вручную для загружаемых файлов. Т.е. пока исключаю возможность некорректно сформированного хеша.
var hashAlg = CADESCOM_HASH_ALGORITHM_CP_GOST_3411; // ГОСТ Р 34.11-94
// Создаем объект CAdESCOM.HashedData
var oHashedData = InitializeHashedData(hashAlg, sHashValue);
var sSignedMessage = CreateSignature(Certificate, oHashedData);
Собственно приведенный код практически полная копия из руководства разработчика http://cpdn.cryptopro.ru...les-cades-sign-hash.htmlРезультат sSignedMessage сохраняется в файл. Средства КриптоАрм и VipNet выдают информацию о подписи, но не валидируются вместе с файлом, на основе которого формировался хеш. Подскажите пожалуйста, что я упустил. Пробовал разные варианты (задавал кодировки), на форуме нашел эту тему https://www.cryptopro.ru...aspx?g=posts&t=11975Разобрал исходный код альтернативной демостраницы (https://www.cryptopro.ru/sites/default/files/products/cades/demopage_/cades_bes_sample.html) и обнаружил, что сначала выполняется SignHash, а затем зачем-то SignCades. Результат подписи - файл подписи, который извлекать надо, содержащий внутри текст результата SignHash. Возможно я не до конца понимаю назначения метода SignHash? Буду признателен любой помощи, спасибо.
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.07.2017(UTC) Сообщений: 3
|
Отвечу сам себе: проблема все таки была в хеше, а точнее в его представлении: cpverify и подобные утилиты к моим файлам выдавали хеш в одном порядке и я использовал аналогичное представление, а для плагина требуется попарная перестановка символов. Т.е. если cpverify выдает хеш в виде ABCDEF0123456789, то плагину в setHashValue нужно подать значение BADCFE1032547698.
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close