Формулировка проблемы:
Задача проходит в рамках реализации прототипа системы 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="
}