Задача [EDI2]: Пользовательский агент Synergy

Формулировка проблемы:

Задача проходит в рамках реализации прототипа системы EDI на базе платформы ARTA Synergy.

В связи с имеющимися технологическими трудностями использования ресурсов клиентского компьютера через web-браузер (в частности, манипуляции с криптоконтейнерами, сканерами и т.д), а также блокирование использования java-апплетов в большинстве популярных браузеров, необходимо разработать пользовательский агент ARTA Synergy, доступный из браузера с помощью REST-запросов на локальный клиентский компьютер.

Возможные варианты использования агента:

  1. Подписывание документов и авторизация с помощью ЭЦП

  2. Сканирование файлов

  3. Получение уведомлений о событиях

Решение:

Необходимо реализовать пользовательский агент ARTA Synergy, реализующий возможность работы с сертификатами и ключами ЭЦП:

Пользовательский агент должен быть реализован в виде приложения для операционных систем семейства Windows (начиная с Windows XP) и Linux (Debian и Ubuntu).

Агент должен распространяться следующим образом:

При запуске приложение агента осуществляет следующие действия:

Пользователь может выполнить с агентом следующие действия:

Эти действия выполняются из контекстного меню иконки приложения в системном лотке.

Агент обрабатывает POST-запросы на корневой URL (/) следующих типов:

Тип запроса указывается в параметре TYPE.

Запрос типа INFO

Запрос типа INFO возвращает JSON-объект со следующими полями:

Параметр Описание Пример возвращаемого значения

KEY_CN

Основное имя (поле CN)

Ruslan Turguldinov

ALGORITHM

Алгоритм, с которым созданы ключи (поддерживаются RSA и GOST)

RSA

SERIAL_NUMBER

Серийный номер сертификата

129

KEY_O

Организация (поле O)

Arta Software

KEY_ST

Штат (поле ST)

Astana

KEY_OU

Подразделение (поле OU)

Technology Development Department

KEY_EMAILADDRESS

Электронная почта (поле emailAddress)

ruslan@arta.kz

KEY_C

Страна (поле C)

KZ

KEY_L

Местоположение (поле L)

Astana

FORMAT

Формат сертификата

X.509

CERT

Сертификат, закодированный в Base64

MIIHhzCCBW+gAwIBAgICAIEwDQYJKoZIhvcNAQEFB и так далее

Пример запроса:

POST / HTTP/1.1
Host: localhost:8389
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

TYPE=INFO

Пример ответа:

{
    "KEY_O": "Arta Software",
    "KEY_ST": "Astana",
    "ALGORITHM": "RSA",
    "KEY_OU": "Technology Development Department",
    "CERT": "MIIHhzC ... RykQyBYBuDgIaE6q2W7u68=",
    "KEY_EMAILADDRESS": "ruslan@arta.kz",
    "KEY_CN": "Ruslan Turguldinov",
    "KEY_C": "KZ",
    "SERIAL_NUMBER": "129",
    "FORMAT": "X.509",
    "KEY_L": "Astana"
}
Запрос типа SIGN

Запрос типа SIGN требует передачи следующих обязательных параметров:

  • DATA - закодированные в Base64 данные для подписи

  • ALG - алгоритм подписи, например SHA1withRSA

Запрос возвращает JSON-объект со следующими полями:

Параметр Описание Пример возвращаемого значения

certificate

Сертификат, которым осуществлялась подпись (в Base64)

MIIHhzCCBW+gAwIBA ... EwDQYJKoZvcNAQEF=

id

Серийный номер сертификата (поле SERIAL_NUMBER в запросе INFO)

129

dataForSign

Данные для подписания (в Base64)

0KXQo9CY

signedData

Подписанные данные (в Base64)

iIXemQNVOiI1GihiW ... XxEHB8osjRJlftXYK=

Пример запроса:

POST / HTTP/1.1
Host: localhost:8389
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

TYPE=SIGN&DATA=0KXQo9CY&ALG=SHA1withRSA

Пример ответа:

{
    "certificate": "MIIHhzCCBW+gAAg ... ICAQYJK8=",
    "id": 129,
    "dataForSign": "0KXQo9CY",
    "signedData": "iIXemQNV ... 12LYTePUrqcau98CY="
}