Сервіс роботи з електроним цифровим підписом (ЕЦП)
Даний сервіс реалізує роботу з ЕЦП за допомогою бібліотеки від IIT
Установка
Сервіс постачається у якості Docker
-контейнера
Інсталяція контейнера
Для збірки контейнера, треба виконати наступні команди
cd <project_dir>
docker stop <eusign_run_container> && docker rm <eusign_run_container>
docker rmi eusign --force
docker build -q -t eusign .
Після успішної компіляції контейнера та створення образу, потрібно виконати команду запуску контейнера:
docker run -d --name eusign --restart=always --network=host -v /data/softpro:/data/softpro eusign
Опис параметрів виклику:
-d
- режим "відокремлено". Ця опція запускає контейнер у фоновому режимі та виводить ID контейнера;--name eusign
- присвоює ім'яeusign
контейнеру. Це ім'я можна використовувати для посилання на контейнер у подальших командахDocker
;--restart=always
- встановлює політику перезапуску для контейнера. У цьому випадку,always
означає, що контейнер буде автоматично перезапускатися, якщо він зупиниться. Якщо контейнер зупиняється з будь-якої причини, крім зупинки або перезапуску самого Docker демона, він буде перезапущений;--network-host
- ця опція встановлює режим мережі для контейнера. Режим host означає, що контейнер буде використовувати мережевий стек хоста, і всі порти, відкриті на контейнері, будуть доступні за IP-адресою хоста;-v /data/softpro:/data/softpro
- підключає том. Це відображає директорію/data/softpro
на хості в/data/softpro
всерединіDocker
контейнера. Це часто використовується для зберігання або спільного використання даних між хостом та контейнером;eusign
- це назваDocker
образу, який буде запущено. Це може бути образ з Docker реєстру або локально доступний образ.
Опис розробленого функціоналу
1. Develop
Функція розшифровки даних користувача при вході за ЕЦП
Параметри запиту:
data_develop
- дані для прозшифруванняpass
- пароль користувачаeu_type
- тип сертифіката перевіркиfile
- файл сертифіката перевіркиdwDev
-dwDev
для ГРЯДиdwType
-dwType
для ГРЯДи
Параметри відповіді:
data
- розшифровані дані користувачаerror
- помилка, якщо вона мала місце
Приклад виклику з клієнта:
const { DevelopData } = require('<path_to_grpc_client_code>/grpcClient');
const signObj = await DevelopData({
// for debug no path is passed
file: '<file>',
pass: '<password>',
eu_type: '<dwTypeIndex>' ? 'm' : 'f',
data_develop: '<encryptedUserInfo>',
dwDev: '<dwDevIndex>',
dwType: '<dwTypeIndex>',
});
2. Sign
Підпис документа чи даних за допомогою ЕЦП
Параметри запиту:
file_sign
- шлях до файлу, який треба підписатиtype
- тип накладеного підпису (external
- накладається зовнішній підпис,internal
- накладається внутрішній підпис)pass
- пароль для печатки підписуeu_type
- тип файлу підпису (File
- локальний ключ підпису,Media
- ключ підпису з віддаленого серверу (ГРЯДА))file
- шлях до локального файлу печатки підписуdwDev
-dwDev
для ГРЯДиdwType
-dwType
для ГРЯДиisS3
- и використовуватиs3
у якості файлового сховища (true
- використовуємоs3
,false
- використовуємо локальне сховище)base64
- дані для підпису у виглядіbase64
рядка
Параметри відповіді:
file
- шлях до підписаного файлуbase64
- підписані дані у виглядіbase64
рядкаerror
- помилка, якщо вона мала місце
Приклад виклику з клієнта:
const { signDoc } = require('<path_to_grpc_client_code>/grpcClient');
const { base64: signedFile } = await signDoc({
base64: Buffer.from(fileBuffer, 'utf-8').toString('base64'),
type: 'external',
debug: false,
file: signSettings.name_file,
pass: signSettings.password,
isS3: false,
});
3. VerifyBase64
Перевірка накладеного підпису у файлі чи даних
Параметри запиту:
data
- дані у виглядіbase64
рядка для перевіркиfile
- файл для перевіркиtype
- тип поверненої інформації (виключно для вшитого підпису) (object
- повертає останній накладений підпис,array
- повертає повний список підписантів)
Параметри відповіді:
info
- інформація про підписантівhash
- гешerror
- помилка, якщо вона мала місце
Приклад виклику з клієнта:
const { VerifyBase64 } = require('<path_to_grpc_client_code>/grpcClient');
const { info: infoSign, error: errInfo } = await VerifyBase64({
data: `${base64File || base64}`, file: isInternal ? null : testData,
});