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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline KuzyXD  
#1 Оставлено : 12 октября 2020 г. 14:38:19(UTC)
KuzyXD

Статус: Участник

Группы: Участники
Зарегистрирован: 07.08.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 7 раз
Здравствуйте. У меня получилось повторить пример, где создается параллельная подпись. Задача в том, что извне поступает документ, который мне надо параллельно подписать с помощью файла .sig (пришедший извне) и своей подписью. Возможно ли добавить эту подпись из .sig с помощью signCades и coSignCades?
Offline Александр Лавник  
#2 Оставлено : 12 октября 2020 г. 14:54:38(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 53 раз
Поблагодарили: 778 раз в 720 постах
Автор: KuzyXD Перейти к цитате
Здравствуйте. У меня получилось повторить пример, где создается параллельная подпись. Задача в том, что извне поступает документ, который мне надо параллельно подписать с помощью файла .sig (пришедший извне) и своей подписью. Возможно ли добавить эту подпись из .sig с помощью signCades и coSignCades?

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

Для этой цели используйте метод CoSignCades.
Техническую поддержку оказываем тут
Наша база знаний
Offline KuzyXD  
#3 Оставлено : 12 октября 2020 г. 14:58:13(UTC)
KuzyXD

Статус: Участник

Группы: Участники
Зарегистрирован: 07.08.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 7 раз
Автор: Александр Лавник Перейти к цитате
Автор: KuzyXD Перейти к цитате
Здравствуйте. У меня получилось повторить пример, где создается параллельная подпись. Задача в том, что извне поступает документ, который мне надо параллельно подписать с помощью файла .sig (пришедший извне) и своей подписью. Возможно ли добавить эту подпись из .sig с помощью signCades и coSignCades?

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

Для этой цели используйте метод CoSignCades.


Да, я так и делаю. Но как я могу скормить этому методу подпись из .sig, если Signer работает только с сертификатом, а не файлом?
Offline two_oceans  
#4 Оставлено : 12 октября 2020 г. 23:42:26(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Как я понимаю, надо сначала загрузить .sig в одну из функций Verify* затем использовать coSign* с Signer со своим сертификатом. То есть непроверенную подпись соподписать не сможете. Именно это сделано в примере, просто не прокомментировано зачем так сделано: VerifyHash потом coSignHash.

Также есть ограничение на алгоритмы хэша - если в список хэшей не добавлен алгоритм хэша Вашего сертификата (например, подпись по гост-2001, а у вас сертификат гост-2012), то подписать простым методом также не получится, придется делать более сложные манипуляции.
Offline Дмитрий-Р  
#5 Оставлено : 20 апреля 2022 г. 18:39:09(UTC)
Дмитрий-Р

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

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

Здравствуйте!
подскажите, как пройти верификацию файла *.sig?
Изначально подписываю файл одной подписью, сохраняю его с расширением .sig, пытаюсь подписать второй подписью coSign, предварительно проверив функцией verifyCades, выдает ошибку: Не найден автор исходной подписи. (0x8009100E)
Пытаюсь:
var CADES_BES = 1;
yield oSignedData.VerifyCades(dataToSign, CADES_BES, false);
Offline KuzyXD  
#6 Оставлено : 20 апреля 2022 г. 18:50:33(UTC)
KuzyXD

Статус: Участник

Группы: Участники
Зарегистрирован: 07.08.2020(UTC)
Сообщений: 23

Сказал(а) «Спасибо»: 7 раз
Автор: Дмитрий-Р Перейти к цитате
Здравствуйте!
подскажите, как пройти верификацию файла *.sig?
Изначально подписываю файл одной подписью, сохраняю его с расширением .sig, пытаюсь подписать второй подписью coSign, предварительно проверив функцией verifyCades, выдает ошибку: Не найден автор исходной подписи. (0x8009100E)
Пытаюсь:
var CADES_BES = 1;
yield oSignedData.VerifyCades(dataToSign, CADES_BES, false);


Подписываю первой подписью вот так:

Код:
export function signFileByThumbprint(certificateThumbprint, dataToSign) {
  return new Promise(((resolve, reject) => {
    window.cadesplugin.async_spawn(function *(args) {
      var oStore = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.Store");
      yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
        CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

      var CertFinder = yield oStore.Certificates;
      var oCertificates = yield CertFinder.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, certificateThumbprint);

      if (yield oCertificates.Count === 0) {
        alert("Сертификат не найден " + certificateCN);
        return;
      }

      oStore.Close();

      var oCertificate = yield oCertificates.Item(1);
      var oSigner = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
      yield oSigner.propset_Certificate(oCertificate);

      var oSignedData = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
      yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
      yield oSignedData.propset_Content(dataToSign);

      var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);

      resolve(sSignedMessage);
    });
  }));
}


Потом с помощью этого кода для двойной:

Код:

export function coSignCreate(certificateThumbprint, dataToSign, sig){
  return new Promise(((resolve, reject) => {
    window.cadesplugin.async_spawn(function *(args) {
      var oStore = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.Store");
      yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
        CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

      var CertFinder = yield oStore.Certificates;
      var oCertificates = yield CertFinder.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, certificateThumbprint);

      if (yield oCertificates.Count === 0) {
        alert("Сертификат не найден " + certificateThumbprint);
        return;
      }

      oStore.Close();

      var oCertificate = yield oCertificates.Item(1);
      var oSigner = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
      yield oSigner.propset_Certificate(oCertificate);
      yield oSigner.propset_CheckCertificate(true);

      var oSignedData = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
      yield oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
      yield oSignedData.propset_Content(dataToSign);

      yield oSignedData.VerifyCades(sig, CADESCOM_CADES_BES, true);

      var sSignedData = yield oSignedData.CoSignCades(oSigner, CADESCOM_CADES_BES);

      resolve(sSignedData);
    });
  }));
}

Отредактировано пользователем 20 апреля 2022 г. 18:52:34(UTC)  | Причина: Не указана

Offline Дмитрий-Р  
#7 Оставлено : 20 апреля 2022 г. 22:52:50(UTC)
Дмитрий-Р

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

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

Спасибо за ответ!
Не совсем понимаю, что передается в sig?
Подпись должна быть отделенная?
Offline Дмитрий-Р  
#8 Оставлено : 21 апреля 2022 г. 15:40:26(UTC)
Дмитрий-Р

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

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

Правильно ли я понял: в dataToSign передаем оригинальный файл, в sig - подпись?

Отредактировано пользователем 21 апреля 2022 г. 16:11:15(UTC)  | Причина: Не указана

Offline Дмитрий-Р  
#9 Оставлено : 21 апреля 2022 г. 17:37:40(UTC)
Дмитрий-Р

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

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

var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
var CADES_BES = 1;
var CAPICOM_ENCODE_BASE64 = 0;
var dataToSign = fileContent;
var dataSign = SigContent;

if (dataToSign) {
yield oSignedData.propset_ContentEncoding(CADES_BES); //CADESCOM_BASE64_TO_BINARY
yield oSignedData.propset_Content(dataToSign);
}

try {
yield oSignedData.VerifyCades(dataSign, CADES_BES, true);
alert("Signature verified");
}
catch (err) {
alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
errormes = "Не удалось создать подпись из-за ошибки: " + cadesplugin.getLastError(err);
throw errormes;
}


Пытаюсь вот этим кодом проверить подпись, выдает ошибку: Не найден автор исходной подписи. (0x8009100E)
Можете подсказать, что не так делаю?
Offline two_oceans  
#10 Оставлено : 22 апреля 2022 г. 8:03:46(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Добрый день.
Логика такая - если подпись отсоединенная, то устанавливаете ContentEncoding и в Content передаете подписанные данные, а в VerifyCades отсоединенную подпись.
Если подпись присоединенная, то ContentEncoding + Content не устанавливаются, сразу в VerifyCades передается присоединенная подпись, так как она уже содержит подписанные данные.
Другими словами, вроде бы все правильно по логике.

Ошибка похоже из-за того, что при проверке отсутствует сертификат подписавшего. Тут логика в том, что в подпись включается либо сам сертификат (+ необязательно сертификаты удостоверяющих центров) либо включается информация для поиска сертификата на компьютере проверяющего. В теории возможен вариант включения только открытого ключа, но на практике все работают с сертификатами. С сертификатом размер отсоединенной подписи будет ощутимо больше. В данной ситуации похоже включена только информация для поиска сертификата, но сертификата на компьютере проверяющего нет. Следовательно, проверить подпись невозможно, так как неоткуда извлечь открытый ключ подписавшего.

Для исправления нужно либо подписывать документ с включением хотя бы сертификата либо установить сертификат подписавшего в хранилище сертификатов на компьютере, где проводится проверка. Достаточно только сертификата, без привязки к ключу. Полагаю подойдет хранилище Addressbook (Другие пользователи), чтобы такие сертификаты не мешались в хранилище Личные.

Кроме того, сертификаты УЦ, выпустившего сертификат подписавшего должны быть либо в подписи либо в хранилищах корневых и промежуточных сертификатов удостоверяющих центров.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.