ЭЦП по гостам Украины в 1С - Внешняя компонента BilboSign.dll

Публикация № 713572

Разработка - Разработка внешних компонент

ЭЦП

Причиной данной разработки послужило отсутствие на данный момент криптопровайдера ЭЦП, который может работать по гостам Украины и использоваться в 1С. Для этого разработана внешняя компонента по технологии NativeAPI.

Bilbosign.dll по сути является адаптером комплекса "IIT Користувач ЦСК", который разработан АТ "ІІТ", и сейчас широко используется всеми системами, использующими ЭЦП. Функционал комплекса "Користувач центру сертифікації ключів" описан на сайте производителя.

Компонента работает на сервере и на клиенте. Опыт успешного использования - 3 года.

Поскольку работа с ЭЦП - для многих мутная тема, разработана демо-база 1С,  которую вы можете скачать ниже.
В конфигурацию встроены все необходимые компоненты для работы.
Читайте справочную информацию в конфигурации, там постарался подробно описать что к чему и как.

 

Описание некоторых свойств и методов библиотеки Bilbosign.dll

Подробное описание приведено во встроенной справке, здесь же я приведу только синтаксис  и описания некоторых основных функций.

Свойства
БиблиотекаИнициализирована (IsInitialized)
Описание: Тип: Булево. При первой загрузке = Ложь, после инициализации библиотеки = Истина

АвтономныйРежим (OfflineMode)
Описание: Тип: Булево. Содержит признак использования библиотеки в Ofline-режиме (без подключения к серверам АЦСК)

ЛичныйКлючСчитан (IsPrivateKeyReaded)
Описание: Тип: Булево. После успешного чтения личного ключа = Истина

НеобходимоУстановитьПараметры (NeedSetSettings)
Описание: Тип: Булево. Содержит признак необходимости выполнить установку параметров работы библиотеки.
Если инициализация компоненты выполняется впервые, то значение = Истина

Методы

Инициализировать (Initialize)
Синтаксис: Инициализировать()
Описание: Инициализирует работу EUSignCP.dll. Результат инициализации можно проверить через свойство БиблиотекаИнициализирована (IsInitialized)

ЗавершитьРаботу (Finalize)
Синтаксис: ЗавершитьРаботу()
Описание: Завершает работу EUSignCP.dll и выгружает её из памяти. Желательно завершать работу компоненты, если в ней больше нет необходимости.

ПолучитьОписаниеОшибки (GetErrorDescription)
Синтаксис: ПолучитьОписаниеОшибки(<КодОшибки>, <Язык>)
Описание: Возвращает локализованное представление ошибки по коду.

УстановитьНастройки (SetSettings)
Синтаксис: УстановитьНастройки()
Описание: Установка параметров работы с библиотекой с помощью графического интерфейса библиотеки.

ПоказатьСертификаты (ShowCertificates)
Синтаксис: ПоказатьСертификаты()
Описание:Отображение сертификатов из файлового хранилища с помощью графического интерфейса библиотеки.

ПоказатьСпискиОтозванныхСертификатов (ShowCRLs)
Синтаксис: ПоказатьСпискиОтозванныхСертификатов()
Описание:Отображение списков отозванных сертификатов из файлового хранилища с помощью графического интерфейса библиотеки.

ОпределитьПараметрыНосителяЛичногоКлюча (GetPrivateKeyMedia)
Синтаксис: ОпределитьПараметрыНосителяЛичногоКлюча(<ТипНосителя>, <Устройство>, <Пароль>)
Описание: Вызывает интерактивный выбор носителя ключа и ввод пароля при помощи графического интерфейса.
Работает только на клиенте. Используется обычно перед вызовом функции СчитатьЛичныйКлюч

СчитатьЛичныйКлюч (ReadPrivateKey)
Синтаксис: СчитатьЛичныйКлюч(<ТипНосителя>, <Устройство>, <Пароль>, <ДанныеСертификата>)
Описание: Выполняет чтение личного ключа с указанного носителя.

СчитатьЛичныйКлючИзДвоичныхДанных (ReadPrivateKeyBinary)
Синтаксис: СчитатьЛичныйКлючИзДвоичныхДанных(<ДвоичныеДанные>, <Пароль>, <ДанныеСертификата>)
Описание: Выполняет чтение личного ключа в виде двоичных данных.

СчитатьЛичныйКлючИзФайла (ReadPrivateKeyFile)
Синтаксис: СчитатьЛичныйКлючИзФайла(<ИмяФайла>, <Пароль>, <ДанныеСертификата>)
Описание: Выполняет чтение личного ключа из указанного файла.

СброситьЛичныйКлюч (ResetPrivateKey)
Синтаксис: СброситьЛичныйКлюч()
Описание: Стирает личный ключ из оперативной памяти

ПолучитьИнформациюОСертификате (GetCertificateInfo)
Синтаксис: ПолучитьИнформациюОСертификате(<Издатель>, <СерийныйНомер>, <ДанныеСертификата>)
Описание: По указанному издателю и серийному номеру сертификата получает полную информацию о сертификате.

УстановитьПараметрыФайловогоХранилища (SetFileStoreSettings)
Описание: Устанавливает текущие настройки файлового хранилища

УстановитьПараметрыOCSPСервера (SetOCSPSettings)
Описание: Устанавливает текущие настройки OCSP-сервера

УстановитьПараметрыTSPСервера (SetTSPSettings)
Описание: Устанавливает текущие настройки TSP-сервера

УстановитьПараметрыLDAPСервера (SetLDAPSettings)
Описание: Устанавливает текущие настройки LDAP-сервера

УстановитьПараметрыCMPСервера (SetCMPSettings)
Описание: Устанавливает текущие настройки CMP-сервера

Base64Кодировать (BASE64Encode)
Синтаксис: Base64Кодировать(<ИсходныеДанные>, <СтрокаBase64>)
Описание: Получает строку, закодированную по алгоритму base64.

Base64Раскодировать (BASE64Decode)
Синтаксис: Base64Раскодировать(<СтрокаBase64>), <ИсходныеДанные>)
Описание: Получает из строки закодированной по алгоритму base64 двоичные данные.

ПодписатьФайл (SignFile)
Синтаксис: ПодписатьФайл(<ИмяФайлаСДанными>, <ИмяФайлаСПодписью>, <ИспользоватьВнешнююПодпись>)
Описание: Формирование внешней или внутренней подписи для файла.

ПроверитьПодписьФайла (VerifyFile)
Синтаксис: ПроверитьПодписьФайла(<ИмяФайлаСПодписью>, <ИмяФайлаСДанными>, <ДанныеПодписи>)
Описание: Проверка внешней или внутренней подписи для файла.

ПодписатьФайлУпрощенно (RawSignFile)
Синтаксис: ПодписатьФайлУпрощенно(<ИмяФайлаСДанными>, <ИмяФайлаСПодписью>)
Описание: Формирование упрощенной подписи для файла.

ПроверитьУпрощеннуюПодписьФайла (RawVerifyFile)
Синтаксис: ПроверитьУпрощеннуюПодписьФайла(<ИмяФайлаСПодписью>, <ИмяФайлаСДанными>, <ДанныеПодписи>)
Описание: Проверка упрощенной подписи для файла.

ПодписатьДанные (SignData)
Синтаксис: ПодписатьДанные(<ИсходныеДанные>, <Подпись>)
Описание: Формирование внешней подписи в виде двоичных данных для строки или двоичных данных.

ПроверитьПодписьДанных (VerifyData)
Синтаксис: ПроверитьПодписьДанных(<ИсходныеДанные>, <Подпись>, <ДанныеПодписи>)
Описание: Проверка внешней подписи в виде двоичных данных для строки или двоичных данных.

ПодписатьДанныеBase64 (SignDataBase64)
Синтаксис: ПодписатьДанныеBase64(<ИсходныеДанные>, <Подпись>)
Описание: Формирование внешней подписи в формате Base64 для строки или двоичных данных.

ПроверитьПодписьДанныхBase64 (VerifyDataBase64)
Синтаксис: ПроверитьПодписьДанныхBase64(<ИсходныеДанные>, <Подпись>, <ДанныеПодписи>)
Описание: Проверка внешней подписи в виде строки Base64 для строки или двоичных данных.

ПодписатьДанныеВнутреннейПодписью (SignDataInternal)
Синтаксис: ПодписатьДанныеВнутреннейПодписью(<ВключатьСертификат>, <ИсходныеДанные>, <ПодписанныеДанные>)
Описание: Формирование внутренней подписи в виде двоичных данных для строки или двоичных данных.

ПроверитьВнутреннююПодписьДанных (VerifyDataInternal)
Синтаксис: ПроверитьВнутреннююПодписьДанных(<ПодписанныеДанные>, <ИсходныеДанные>, <ДанныеПодписи>)
Описание: Проверка внутренней подписи для двоичных данных.

ПроверитьВнутреннююПодписьДанныхСтрока (VerifyDataInternalStr)
Синтаксис: ПроверитьВнутреннююПодписьДанныхСтрока(<ПодписанныеДанные>, <ИсходныеДанные>, <ДанныеПодписи>)
Описание: Проверка внутренней подписи для строковых данных. Имеет смысл для работы с обычными текстовыми данными (например, xml, json)

ПодписатьДанныеВнутреннейПодписьюBase64 (SignDataInternalBase64)
Синтаксис: ПодписатьДанныеВнутреннейПодписьюBase64(<ВключатьСертификат>, <ИсходныеДанные>, <ПодписанныеДанные>)
Описание: Формирование внутренней подписи в виде Base64-строки для строки или двоичных данных.

ПроверитьВнутреннююПодписьДанныхBase64 (VerifyDataInternalBase64)
Синтаксис: ПроверитьВнутреннююПодписьДанныхBase64(<ПодписанныеДанные>, <ИсходныеДанные>, <ДанныеПодписи>)
Описание: Проверка внутренней подписи для данных в виде Base64-строки.

ПроверитьВнутреннююПодписьДанныхBase64Строка (VerifyDataInternalBase64Str)
Синтаксис: ПроверитьВнутреннююПодписьДанныхBase64Строка(<ПодписанныеДанные>, <ИсходныеДанные>, <ДанныеПодписи>)
Описание: Проверка внутренней подписи для строковых данных в виде Base64-строки. Имеет смысл для работы с обычными текстовыми данными (например, xml, json)

 

Скачать файлы

Наименование Файл Версия Размер
ЭЦП по гостам Украины в 1С - демонстрационная конфигурация

.zip 16,20Mb
25
.zip 2.0.0.1 16,20Mb 25 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. saa@kuzov.org 11.12.17 21:50 Сейчас в теме
Многие выкладывают готовые Native-компоненты. Но мне, как начинающему разработчику ВК на С++, очень хочется получить работающие исходники хотя бы одного серьезного проекта, чтобы посмотреть где как что сделано и использовать как образец для своих разработок.

В реальности у меня только учебный пример от 1С. Есть ли еще ВК в открытом виде?
2. KAV2 12.12.17 06:36 Сейчас в теме
(1) Учебный пример компоненты на C++ весьма годный, там все есть для создания своей компненты в принципе.
3. Zahary 38 12.12.17 11:04 Сейчас в теме
(1) Здесь есть исходники. Проект конечно не серьезный, но как пример - вполне рабочий.
Самое главное - понять технологию, а исходники серьезных проектов начинающему разработчику ни к чему. Учиться нужно от простого к сложному. Лично для меня самое сложное в ВК - это работа со строковыми типами и их указателями (WCHAR_T, wchar_t, char*, CHAR*, PSTR, PCZPSTR, PCNZCH, string, wstring и.т.д. и т.п).
4. Zahary 38 05.01.18 18:11 Сейчас в теме
Вопрос: При попытке передать двоичные данные как аргумент функции внешней компоненты происходит ошибка "Неверный аргумент"
Ответ: Передача двоичных данных во внешние компоненты реализована начиная с версии 8.3.10
Если используется платформа ниже, тогда используйте функции для работы с файлами либо с данными в формате Base-64
5. Online-Ufa 06.01.18 19:47 Сейчас в теме
С Новым годом!
Следующая версия будет называться FrodoSign.dll ? ))
Оставьте свое сообщение