Формулировка проблемы:
Задача проходит в рамках реализации прототипа системы EDI на базе платформы ARTA Synergy.
В связи с имеющимися технологическими трудностями использования ресурсов клиентского компьютера через web-браузер (в частности, манипуляции с криптоконтейнерами, сканерами и т.д), а также блокирование использования java-апплетов в большинстве популярных браузеров, необходимо разработать пользовательский агент ARTA Synergy, доступный из браузера с помощью REST-запросов на локальный клиентский компьютер.
Возможные варианты использования агента:
Подписывание документов и авторизация с помощью ЭЦП
Сканирование файлов
Получение уведомлений о событиях
Решение:
Необходимо реализовать пользовательский агент ARTA Synergy, реализующий возможность работы с сертификатами и ключами ЭЦП:
Получение информации о сертификате
Подписывание произвольных данных
Пользовательский агент должен быть реализован в виде приложения для операционных систем семейства Windows (начиная с Windows XP) и Linux (Debian и Ubuntu).
Агент должен распространяться следующим образом:
Для ОС Windows - в виде файла инсталлятора
Для Debian/Ubuntu - в виде *.deb
-пакета
При запуске приложение агента осуществляет следующие действия:
Размещается в «системном лотке» окружения рабочего стола
Ждёт запросов по протоколу HTTP на адресе
127.0.0.1
(localhost
) и
порту 8389
Пользователь может выполнить с агентом следующие действия:
Выбрать контейнер ключей и сертификатов. Поддерживаются
контейнеры в формате PKCS#12
(*.p12
, *.pfx
).
Завершить работу
Эти действия выполняются из контекстного меню иконки приложения в системном лотке.
Агент обрабатывает POST
-запросы на корневой URL
(/
) следующих типов:
INFO
SIGN
Тип запроса указывается в параметре TYPE
.
Запрос типа INFO
возвращает JSON-объект со
следующими полями:
Параметр | Описание | Пример возвращаемого значения |
---|---|---|
|
Основное имя (поле |
|
|
Алгоритм, с которым созданы ключи (поддерживаются
|
|
|
Серийный номер сертификата |
|
|
Организация (поле |
|
|
Штат (поле |
|
|
Подразделение (поле |
|
|
Электронная почта (поле |
|
|
Страна (поле |
|
|
Местоположение (поле |
|
|
Формат сертификата |
|
|
Сертификат, закодированный в |
|
Пример запроса:
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
требует передачи следующих
обязательных параметров:
DATA
- закодированные в
Base64
данные для подписи
ALG
- алгоритм подписи, например
SHA1withRSA
Запрос возвращает JSON-объект со следующими полями:
Параметр | Описание | Пример возвращаемого значения |
---|---|---|
|
Сертификат, которым осуществлялась подпись (в
|
|
|
Серийный номер сертификата (поле
|
|
|
Данные для подписания (в |
|
|
Подписанные данные (в |
|
Пример запроса:
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=" }