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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Sergey Grigoriev  
#1 Оставлено : 11 ноября 2019 г. 21:07:36(UTC)
Sergey Grigoriev

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

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

Сказал(а) «Спасибо»: 1 раз
Здравствуйте.

В нашем web приложении пользователи подписывают файлы в браузере при помощи ‎КриптоПро ЭЦП Browser plugin.
Есть необходимость перед сохранением открепленной сигнатуры в БД проверить её. Проверку сделали с помощью CAPICOM, но
она не проходит. Ошибка верификации: "Неправильное значение хеша".

В связи с этим возникает несколько вопросов.

1. Возможно ли проверить подпись CADES_BES сделанную в ‎КриптоПро ЭЦП Browser plugin при помощи CAPICOM?
2. Возможно ли подписать данные в ‎КриптоПро ЭЦП Browser plugin не в формате CADES_BES так, чтобы она проходила проверку при помощи CAPICOM?
3. Если все же придется использовать интерфейс COM (cadescom.dll) то где можно взять описание интерфейсов CADESCOM для Delphi? (для CAPICOM я нашел CAPICOM_TLB.pas здесь на форуме)

Файлы подписываются для внутреннего пользования и за пределы организации не уходят.
Delphi 10.2 Tokyo.

Заранее спасибо.
Offline Андрей Писарев  
#2 Оставлено : 11 ноября 2019 г. 21:36:33(UTC)
Андрей *

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

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

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

Код приведите, как работаете с CAPICOM.
Тема поднималась много раз.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 11 ноября 2019 г. 21:38:52(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
https://www.cryptopro.ru...&m=107336#post107336

пример заполнения Buffer
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#4 Оставлено : 11 ноября 2019 г. 21:40:42(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Автор: Sergey Grigoriev Перейти к цитате

3. Если все же придется использовать интерфейс COM (cadescom.dll) то где можно взять описание интерфейсов CADESCOM для Delphi? (для CAPICOM я нашел CAPICOM_TLB.pas здесь на форуме)

Файлы подписываются для внутреннего пользования и за пределы организации не уходят.
Delphi 10.2 Tokyo.

Заранее спасибо.



Он аналогичен CAPICOM, пример выше.

Интерфейс COM

Техническую поддержку оказываем тут
Наша база знаний
Offline Sergey Grigoriev  
#5 Оставлено : 11 ноября 2019 г. 22:03:00(UTC)
Sergey Grigoriev

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей Писарев Перейти к цитате

Код приведите, как работаете с CAPICOM.


То, что подписывается через CAPICOM им же проверяется нормально. И прикрепленная и открепленная подпись. И бинарная и Base64.
А вот с подписью плагина - беда

DMDocSigner.pas (13kb) загружен 2 раз(а).

Offline Андрей Писарев  
#6 Оставлено : 11 ноября 2019 г. 22:05:58(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Автор: Sergey Grigoriev Перейти к цитате
Автор: Андрей Писарев Перейти к цитате

Код приведите, как работаете с CAPICOM.


То, что подписывается через CAPICOM им же проверяется нормально. И прикрепленная и открепленная подпись. И бинарная и Base64.


Пришлите пример бинарный файл и подпись к нему.

Или сами проверьте сторонним софтом.

Техническую поддержку оказываем тут
Наша база знаний
Offline Sergey Grigoriev  
#7 Оставлено : 11 ноября 2019 г. 22:11:09(UTC)
Sergey Grigoriev

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей Писарев Перейти к цитате

Пришлите пример бинарный файл и подпись к нему.
Или сами проверьте сторонним софтом.


Не совсем понял. Файл подписанный CAPICOM'ом? или плагином?
То что подписывается CAPICOM'ом успешно проходит проверку на https://crypto.kontur.ru/verify#

Отредактировано пользователем 11 ноября 2019 г. 22:12:28(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#8 Оставлено : 11 ноября 2019 г. 22:16:23(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Автор: Sergey Grigoriev Перейти к цитате

В нашем web приложении пользователи подписывают файлы в браузере при помощи ‎КриптоПро ЭЦП Browser plugin.


Особенности представления данных в интерфейсе COM


Создание и проверка отделенной подписи

Код:
var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
        // Значение свойства ContentEncoding должно быть задано
        // до заполнения свойства Content
        oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
        oSignedData.Content = dataToSign;


У Вас в коде web-приложения так же?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#9 Оставлено : 11 ноября 2019 г. 22:17:12(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
dataToSign - в base64.
Техническую поддержку оказываем тут
Наша база знаний
Offline Sergey Grigoriev  
#10 Оставлено : 11 ноября 2019 г. 22:25:57(UTC)
Sergey Grigoriev

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей Писарев Перейти к цитате
dataToSign - в base64.

Да, только в асинхронном режиме:
Код:

var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
      if (dataToSign) {
        // Данные на подпись ввели
        yield oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);
        yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); //
        if (typeof (setDisplayData) != 'undefined') {
          //Set display data flag flag for devices like Rutoken PinPad
          yield oSignedData.propset_DisplayData(1);
        }
        yield oSignedData.propset_Content(dataToSign);

        try {
          if (detached) {
            Signature = yield oSignedData.SignCades(oSigner, cadesplugin.CADESCOM_CADES_BES, true);
          } else {
            Signature = yield oSignedData.SignCades(oSigner, cadesplugin.CADESCOM_CADES_BES);
          }



Причем самим плагином его подписи проверяются нормально
Код:

if (sSignedMessage) {
      // Подпись на проверку ввели
      var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
      try {
        var res;
        if (dataToVerify) {
          // Значение свойства ContentEncoding должно быть задано
          // до заполнения свойства Content
          yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
          yield oSignedData.propset_Content(dataToVerify);
          yield oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES, true);
        } else {
          res = yield oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES);
        }

        // oSignedData.Signers.Item(1).Certificate.SubjectName
        var Signers = yield oSignedData.Signers;
        var Item = yield Signers.Item(1); // ???
        var Cert = yield Item.Certificate;
        var SubjectName = yield Cert.SubjectName;
        var IssuerName = yield Cert.IssuerName;
        var SerialNumber = yield Cert.SerialNumber;
        var ValidFromDate = yield Cert.ValidFromDate;
        var ValidToDate = yield Cert.ValidToDate;
        var Version = yield Cert.Version;
        // 
        var SigningTime = yield Item.SigningTime;
        //  
        res = true;

      } catch (err) {
        res = false;
        var errmsg = cadesplugin.getLastError(err);
        // alert("Failed to verify signature. Error: " + errmsg);
      }
    }

Отредактировано пользователем 11 ноября 2019 г. 22:29:12(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#11 Оставлено : 11 ноября 2019 г. 23:33:28(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Предположим, что в CAPICOM всё корректно.

Тогда данные неправильно преобразуются для плагина и он подписывает не то, что читаете для CAPICOM.
Данные перед кодированием в base64 для плагина - как инициализируете\получаете\из базы\сайта?
Техническую поддержку оказываем тут
Наша база знаний
Offline Sergey Grigoriev  
#12 Оставлено : 11 ноября 2019 г. 23:39:46(UTC)
Sergey Grigoriev

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей Писарев Перейти к цитате

Тогда данные неправильно преобразуются для плагина и он подписывает не то, что читаете для CAPICOM.


Скорее всего проблема действительно с получением BLOB из БД. Завтра проверю и сообщу результат.

Спасибо.

Offline Андрей Писарев  
#13 Оставлено : 12 ноября 2019 г. 0:03:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Еще...
CAPICOM_TLB - используется тот, что сформировали в текущей среде разработки?

Цитата:

FCertificates :ICertificates2;
а FStore: IStore - ICertificates

FCertificates := FStore.Certificates;



Компилироваться не будет.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Sergey Grigoriev оставлено 12.11.2019(UTC)
Offline Sergey Grigoriev  
#14 Оставлено : 12 ноября 2019 г. 14:11:13(UTC)
Sergey Grigoriev

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

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

Сказал(а) «Спасибо»: 1 раз
После проверки кода приложения сервера подтвердились ваши слова. На проверку в CAPICOM подавались "правильные сигнатуры", но проверяемые данные были от других файлов.

Все починил и проверки подписей, сделанных в браузерном плагине (CADES_BES), стали проходить успешно средствами CAPICOM на сервере.

Автор: Андрей Писарев Перейти к цитате
Еще...
CAPICOM_TLB - используется тот, что сформировали в текущей среде разработки?

Цитата:

FCertificates :ICertificates2;
а FStore: IStore - ICertificates

FCertificates := FStore.Certificates;



Компилироваться не будет.


CAPICOM_TLB взят отсюда: https://www.cryptopro.ru...ts&m=29591#post29591 вместе с capicom.dll
и на его основе был написан наш модуль для работы с CAPICOM.

Насчет второго не совсем понял. У меня все компилится нормально и работает.

Большое спасибо за помощь.

ПС. Если у вас имеется модуль подобный CAPICOM_TLB.pas для CADESCOM (например CADESCOM_TLB.pas) не могли бы вы поделится?
Еще раз спасибо.

Отредактировано пользователем 12 ноября 2019 г. 14:14:05(UTC)  | Причина: Не указана

Offline two_oceans  
#15 Оставлено : 14 ноября 2019 г. 13:24:16(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 63 раз
Поблагодарили: 221 раз в 207 постах
Автор: Sergey Grigoriev Перейти к цитате
ПС. Если у вас имеется модуль подобный CAPICOM_TLB.pas для CADESCOM (например CADESCOM_TLB.pas) не могли бы вы поделится?
Еще раз спасибо.
В идеале у Дельфи где-то есть утилита по их формированию под конкретную версию Дельфи, именно поэтому лучше воспользоваться утилитой чем искать в интернете вариант, сделанный, возможно, для другой версии Дельфи. У версий есть микроотличия в синтаксисе и тогда, как заметил коллега "компилироваться не будет".

Offline Андрей Писарев  
#16 Оставлено : 14 ноября 2019 г. 13:42:41(UTC)
Андрей *

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Автор: Sergey Grigoriev Перейти к цитате

ПС. Если у вас имеется модуль подобный CAPICOM_TLB.pas для CADESCOM (например CADESCOM_TLB.pas) не могли бы вы поделится?
Еще раз спасибо.



В Delphi 10.3:
CAdESCOM_TLB
CAPICOM_TLB
CERTENROLLLib_TLB
Delphi 10.3 - CAdESCOM_TLB CAPICOM_TLB CERTENROLLLib_TLB.zip (83kb) загружен 2 раз(а).



В Delphi 7:
CAdESCOM_TLB
CAdESCOM_TLB DELPHI7.zip (40kb) загружен 1 раз(а).

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

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

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

Сказал «Спасибо»: 336 раз
Поблагодарили: 1330 раз в 1034 постах
Автор: Sergey Grigoriev Перейти к цитате

Файлы подписываются для внутреннего пользования и за пределы организации не уходят.
Delphi 10.2 Tokyo.


Component\Import Component...\Import a Type Library\ ... поиском - cades
+ Generate Component Wrappers

Snimok ehkrana ot 2019-11-14 14-45-16.png (48kb) загружен 5 раз(а).

Snimok ehkrana ot 2019-11-14 14-45-30.png (51kb) загружен 5 раз(а).

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