Статус: Новичок
  Группы: Участники
 Зарегистрирован: 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,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Здравствуйте. В архиве с демо-страницами или онлайне  примере\документации - достаточно 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,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Автор: Стрелков Сергей  Спасибо огромное за ликбез. И еще один вопрос, версия плагина для создания данной подписи играет роль?
  Там же в коде нашел комментарий ,что создать подпись типа 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