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