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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline r00xus  
#1 Оставлено : 13 сентября 2022 г. 16:10:47(UTC)
r00xus

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.07.2022(UTC)
Сообщений: 4
Российская Федерация

Здравствуйте.

У меня задача подписывать PDF файлы через КриптоПро ЭЦП Browser plug-in с отделенной подписью
В документации нашел пример
Вот что у меня получилось по его мотивам.

Код:
const CADESCOM_CADES_BES = 1;

async function sign(cert, data) {

    const signer = await cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");

    await signer.propset_Certificate(cert);
    await signer.propset_CheckCertificate(true);

    const signedData = await cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");

    await signedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);

    const base64Data = btoa(data);
    await signedData.propset_Content(base64Data);

    let signedMessage = "";

    try {

        signedMessage = await signedData.SignCades(signer, CADESCOM_CADES_BES, true);

        signedMessage = atob(signedMessage);

        return signedMessage;

    } catch (e) {

        e = cadesplugin.getLastError(er);

        alert(`Ошибка подписи файла: ${e}`);
    }
}


После получения signedMessage сохраняю в файл с расширением *.p7s (насколько я понял там все равно *.sig *.sgn)
Посмотрел в блокноте. Вроде похоже на подпись.
Пытаюсь проверить файл в cptools.exe. Пишет что "Выбранный файл не является подписью или поврежден"
Offline Андрей *  
#2 Оставлено : 13 сентября 2022 г. 18:47:09(UTC)
Андрей *

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

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

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

Прислать файл можете?
Техническую поддержку оказываем тут
Наша база знаний
Offline r00xus  
#3 Оставлено : 14 сентября 2022 г. 10:48:36(UTC)
r00xus

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.07.2022(UTC)
Сообщений: 4
Российская Федерация

Здравствуйте.
Вот архив с тем что получилось в результате подписания Sample.001.zip (467kb) загружен 5 раз(а).
Вот песочница где пробую создавать отделенную подпись (файл SignTest\sign_detached\sign_detached.html) SignTest.zip (82kb) загружен 6 раз(а).
Offline Андрей *  
#4 Оставлено : 14 сентября 2022 г. 10:59:00(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Сообщите конфигурацию рабочего места,
какая версия csp\плагина, полностью

https://www.cryptopro.ru...ge/cades_bes_sample.html

формируется без ошибок?
Цитата:


После получения signedMessage сохраняю в файл с расширением *.p7s (насколько я понял там все равно *.sig *.sgn)
Посмотрел в блокноте. Вроде похоже на подпись.


Каким образом?


Попробуйте сохранять в base64 и прислать подпись в таком виде на проверку.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 14 сентября 2022 г. 11:10:17(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Цитата:
signedMessage = atob(signedMessage);


Это убрать
Техническую поддержку оказываем тут
Наша база знаний
Offline r00xus  
#6 Оставлено : 14 сентября 2022 г. 17:17:08(UTC)
r00xus

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.07.2022(UTC)
Сообщений: 4
Российская Федерация

SignTest_working_version.zip (82kb) загружен 15 раз(а).
Автор: Андрей * Перейти к цитате
Цитата:
signedMessage = atob(signedMessage);


Это убрать

Это помогло! Спасибо Applause
Кроме того, если получать файл для подписи так как делаю я через FileReader.readAsArrayBuffer, то результат будет ArrayBuffer
Его нужно развернуть в строку прежде чем кодировать в BASE64
Код:
function arrayBufferToBase64(buffer) {
    let binary = '';
    let bytes = new Uint8Array(buffer);
    let len = bytes.byteLength;
    for (let i = 0; i < len; i++) {
        binary += String.fromCharCode(bytes[i]);
    }
    return btoa(binary);
}

Рабочий пример с формированием подписи вот тут SignTest_working_version.zip (82kb) загружен 15 раз(а). если кому-то вдруг потребуется.
Offline Андрей *  
#7 Оставлено : 14 сентября 2022 г. 17:48:03(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Примеры подписания не смотрели на демо-страницах и в документации?

А если файл будет 10...50 мб?


Подпись файла с использованием FileAPI и чтением файла по частям
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.