Skip to main content

Сервіс роботи з електроним цифровим підписом (ЕЦП)

Даний сервіс реалізує роботу з ЕЦП за допомогою бібліотеки від 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

Опис параметрів виклику:

  1. -d - режим "відокремлено". Ця опція запускає контейнер у фоновому режимі та виводить ID контейнера;
  2. --name eusign - присвоює ім'я eusign контейнеру. Це ім'я можна використовувати для посилання на контейнер у подальших командах Docker;
  3. --restart=always - встановлює політику перезапуску для контейнера. У цьому випадку, always означає, що контейнер буде автоматично перезапускатися, якщо він зупиниться. Якщо контейнер зупиняється з будь-якої причини, крім зупинки або перезапуску самого Docker демона, він буде перезапущений;
  4. --network-host - ця опція встановлює режим мережі для контейнера. Режим host означає, що контейнер буде використовувати мережевий стек хоста, і всі порти, відкриті на контейнері, будуть доступні за IP-адресою хоста;
  5. -v /data/softpro:/data/softpro - підключає том. Це відображає директорію /data/softpro на хості в /data/softpro всередині Docker контейнера. Це часто використовується для зберігання або спільного використання даних між хостом та контейнером;
  6. 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,
});

Корисні посилання