Статус: Новичок
Группы: Участники
Зарегистрирован: 21.06.2022(UTC) Сообщений: 8  Откуда: Медведево Сказал(а) «Спасибо»: 6 раз
|
Добрый день. В документации не нашел примера создания архивной подписи в браузере(Crypto Pro Browser Plugin). В исходном коде(архив demopage),нашел небольшую информацию о создании данного вида подписи ,но не уверен в корректности воссозданного мной кода. Есть ли пример создания данного вида подписи для долгосрочного архивирования на JS ? Вот что я вычитал относительно того ,что должна обязательно иметь архивная подпись : 1. TSA (штамп времени) 2. Полная цепочка сертификатов 3. OCSP/CRL-ответы 4. Атрибут времени подписи 5. Атрибут имени документа 6. Архивные атрибутыПункты 1, 2, 4, 5 - в коде задаются явно Пункт 3 - на сколько я понял он задается неявно(адреса серверов берутся из сертификата и в зависимости от типа подписи CadesXLongType1 или CadesA добавляются автоматичсеки) Пунтк 6 - о каких атрибутах идет речь? Заранее спасибо! Ниже текущая(моя) реализации: Код: certificate?: CryptoProCertificate;
rawBase64ToSign?: string;
tspURL: string;
docName: string;
};
export const createCadesAType = async (params: ParamsType) => {
const CP_SIGNER = 'CAdESCOM.CPSigner';
const SIGNED_DATA = 'CAdESCOM.CadesSignedData';
const CP_ATTRIBUTE = 'CADESCOM.CPAttribute';
const plugin = window.cadesplugin;
const { certificate, rawBase64ToSign, tspURL, docName } = params;
try {
if (!plugin) {
throw new Error('Плагин не доступен');
}
if (!certificate) {
throw new Error('Сертификат обязателен для подписи');
}
if (!rawBase64ToSign) {
throw new Error('Данные для подписи обязательны');
}
const cpSigner: CPSigner = await plugin.CreateObjectAsync!(CP_SIGNER);
await cpSigner.propset_Certificate(certificate.__CadesCertificate);
await cpSigner.propset_Options(plugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN); // Полная цепочка сертификатов
await cpSigner.propset_CheckCertificate(true);
await cpSigner.propset_TSAAddress(tspURL); // TSA (штамп времени)
const attr: AuthenticatedAttributes = await cpSigner.AuthenticatedAttributes2;
const timeAttr: CPAttribute = await plugin.CreateObjectAsync!(CP_ATTRIBUTE);
await timeAttr.propset_Name(plugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
await timeAttr.propset_Value(new Date());
await attr.Add(timeAttr); // Атрибут времени подписи
const docNameAttr: CPAttribute = await plugin.CreateObjectAsync!(CP_ATTRIBUTE);
await docNameAttr.propset_Name(plugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME);
await docNameAttr.propset_Value(docName);
await attr.Add(docNameAttr); // Атрибут имени документа
const signedData: CadesSignedData = await plugin.CreateObjectAsync!(SIGNED_DATA);
await signedData.propset_ContentEncoding(plugin.CADESCOM_BASE64_TO_BINARY);
await signedData.propset_Content(rawBase64ToSign);
const signature = await signedData.SignCades(cpSigner, plugin.CADESCOM_CADES_A, true); // Создаем открепленную подпись типа CADES-A
await signedData.VerifyCades(signature, plugin.CADESCOM_CADES_A, true); // Проверяем созданную подпись
return signature;
} catch (error) {
let message = '';
if (plugin) {
message = `Ошибка при создании подписи CADES-A: ${plugin.getLastError(error)}`;
} else {
message = `${(error as Error)?.message ?? 'Ошибка'}`;
}
throw new Error(message);
}
};
Отредактировано пользователем 22 октября 2025 г. 18:14:51(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969   Сказал «Спасибо»: 604 раз Поблагодарили: 2346 раз в 1842 постах
|
Здравствуйте. В архиве с демо-страницами или онлайне примере\документации - достаточно CADESCOM_CADES_A указать, вместо CAdES-X Long Type 1, всё остальное формируется внутри. timeAttr - можно не прописывать в коде, добавится локальное, что равнозначно new Date() (либо использовать "внешний источник правильного времени, не ориентироваться на локальное, но смысл - если рядом будет штамп времени лежать) |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 939  Откуда: Крипто-Про Поблагодарили: 115 раз в 104 постах
|
Архивные атрибуты - имеется в виду атрибут ATS-hash-indexV3 и сам архивный штамп. Вручную их добавлять не нужно, достаточно указать тип подписи CADESCOM_CADES_A Отредактировано пользователем 22 октября 2025 г. 19:36:07(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил Новожилова Елена за этот пост.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.06.2022(UTC) Сообщений: 8  Откуда: Медведево Сказал(а) «Спасибо»: 6 раз
|
Спасибо огромное за ликбез. И еще один вопрос, версия плагина для создания данной подписи играет роль?
Там же в коде нашел комментарий ,что создать подпись типа CADES-A версия плагина должна быть не ниже '2.0.15260'
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969   Сказал «Спасибо»: 604 раз Поблагодарили: 2346 раз в 1842 постах
|
Автор: Стрелков Сергей  Спасибо огромное за ликбез. И еще один вопрос, версия плагина для создания данной подписи играет роль?
Там же в коде нашел комментарий ,что создать подпись типа CADES-A версия плагина должна быть не ниже '2.0.15260' Да, поэтому есть примечание в коде. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close