JC-WebClient представляет из себя приложение на основе технологии локального Web-сервера, которое работает на стороне клиента. Приложение:
Архитектура JC-WebClient приведена на рисунке ниже:
Основные компоненты JC-WebClient:
Поддерживаемые устройства¶
JC-WebClient поддерживает работу со следующими средствами электронной подписи (далее – токенами) в форм-факторах USB-токен или смарт-карта:
Средство электронной подписи
В состав каких устройств входит
Будем далее называть токен GOST 2
Будем далее называть токен GOST
Будем далее называть токен PKI
Будем далее называть токен STORAGE
В качестве доверенного Trust Screen-устройства JC-WebClient поддерживает устройство Антифрод-терминал – собственный продукт компании «Аладдин Р.Д.».
Пошаговое руководство по доработке Web-страниц¶
Подключение и инициализация JC-WebClient¶
Для возможности работы с JC-WebClient через JavaScript API необходимо последовательно выполнить следующие действия (полный пример первых 3-х пунктов представлен в разделе Начало работы ):
Загрузите скрипт JCWebClient.js с локального адреса: https://localhost:24738/JCWebClient.js. На данном этапе необходимо учесть ситуацию, если на ПК пользователя отсутствует JC-WebClient, поэтому для загрузки скрипта JCWebClient.js рекомендуется следовать следующему алгоритму:
1.3. Сообщите пользователю о необходимости установить JC-WebClient и предложите вариант с его установкой.
Для этого параллельно основному процессу выполните следующее:
Отобразите пользователю информационное сообщение о необходимости установить JC-WebClient. В этом же сообщении сообщите о том, что загрузка инсталлятора JC-WebClient на ПК пользователя начнётся автоматически, но если не началась в течение, например, 5 секунд, предложите нажать на специальную ссылку для скачивания инсталлятора с Web-сервера.
Выполните автоматическую загрузку инсталлятора JC-WebClient на ПК пользователя с Web-сервера вашего приложения.
Если пользователь работает на платформе macOS, то после установки потребуется перезагрузка ПК (инсталлятор JC-WebClient уведомит об этом).
Если пользователь использует браузер Mozilla Firefox, то после установки потребуется перезапустить все его открытые экземпляры.
1.4. Ожидайте N секунд.
1.5. Средствами JavaScript повторно попытайтесь асинхронно загрузить JCWebClient.js в ожидании, что пользователь установил JC-WebClient.
Пример реализации алгоритма загрузки скрипта JCWebClient.js
Проверьте версию JC-WebClient.
На данном этапе следует проверить, соответствует ли версия JC-WebClient пользователя той, которая поддерживается Вашим Web-приложением. Для этого рекомендуется следовать следующему алгоритму:
3.3. Сообщите пользователю о том, что для корректной работы Web-приложения необходима другая версия JC-WebClient и далее можете:
3.4. Ожидайте N секунд.
3.5. Повторно асинхронно получите версию JC-WebClient командой getJCWebClientVersion в ожидании, что пользователь установил необходимую версию.
Пример реализации проверки версии JC-WebClient
Рекомендуем подписаться на уведомления от JC-WebClient для отслеживания событий подключения/отключения токенов и изменения состояния аутентификации (см. Работа с событиями ).
После описанных выше действий Web-страница готова к последующей работе с JC-WebClient.
Базовые команды для работы с токенами¶
При работе с USB-токенами и смарт-картами (устройствами) необходимо выбрать на устройстве криптографическое приложение (токен). На одном устройстве может быть несколько токенов. Различные токены обладают различной функциональностью: например, GOST и GOST 2 реализует российские криптоалгоритмы, а PRO – западные. Для работы с токенами в JC-WebClient API предусмотрены слоты.
Для получения массива слотов всех токенов (в том числе Антифрод-терминала без смарт-карты), подключенных к ПК, используйте команду getAllSlots :
Например, если к ПК подключено устройство JaCarta PRO/ГОСТ (на нём 2 поддерживаемых токена – PRO и GOST), то команда getAllSlots вернёт массив из двух объектов с разными идентификаторами слотов: один – для PRO, второй – для GOST.
Схема ниже иллюстрирует общий случай связи слотов с токенами и устройствами:
Из схемы видно, что при подключении нескольких устройств (USB-токен, смарт-карта в Антифрод-терминале) каждый токен устройства (а также Антифрод-терминал без смарт карты) будет закреплен за отдельным слотом, которые используются как идентификаторы в JC-WebClient API.
После получения массива слотов выберите токен, с которым вы хотите продолжать работать. Используйте команду getTokenInfo для получения информации о токене. Отсортировать массив токенов по их типу можно следующим образом:
Далее получите информацию о сертификатах, загруженных на токен. Для этого используйте следующие команды:
Полученную о сертификатах информацию необходимо отфильтровать и
После успешной аутентификации токен переходит в режим пользователя, все пользовательские операции становятся доступными.
Узнать в каком режиме работает токен можно:
Разделение контекста между вкладками браузера¶
В JC-WebClient реализовано разделение контекста (сеансов работы с токеном) при работе из различных вкладок браузера. Это означает, что сеанс работы с токеном в режиме пользователя, установленный из одной вкладки, недоступен для других вкладок этого или другого браузера.
Контекст по умолчанию сохраняется при переходе с одной страницы на другую в рамках одной и той же вкладки браузера, а также при обновлении страницы (нажатие клавиши F5).
JC-WebClient предоставляет возможность явного указания на необходимость обнуления контекста при выходе за пределы данной Web-страницы. Для этого установите на этой Web-странице значение параметра JCWebClient2.saveSession в false :
Указанное значение параметра будет действовать только в пределах данной Web-страницы.
В JC-WebClient реализован таймаут в размере 1 минуты, по истечении которого контекст автоматически обнуляется, если приложение определило, что Web-страница перестала отвечать. При этом также удаляется и сеанс работы с токеном. Это произойдёт, например, в следующих случаях:
Более детальная информация по работе с JC-WebClient представлена в следующих разделах:
Быстрый старт¶
Назначение и архитектура JC-WebClient¶
JC-WebClient представляет из себя приложение на основе технологии локального Web-сервера, которое работает на стороне клиента. Приложение:
Архитектура JC-WebClient приведена на рисунке ниже:
Основные компоненты JC-WebClient:
Поддерживаемые устройства¶
JC-WebClient поддерживает работу со следующими средствами электронной подписи (далее – токенами) в форм-факторах USB-токен или смарт-карта:
Средство электронной подписи
В состав каких устройств входит
Будем далее называть токен GOST 2
Будем далее называть токен GOST
В качестве доверенного Trust Screen-устройства JC-WebClient поддерживает устройство Антифрод-терминал – собственный продукт компании «Аладдин Р.Д.».
Пошаговое руководство по доработке Web-страниц¶
Подключение и инициализация JC-WebClient¶
Для возможности работы с JC-WebClient через JavaScript API необходимо последовательно выполнить следующие действия (полный пример первых 3-х пунктов представлен в разделе Начало работы ):
Загрузите скрипт JCWebClient.js с локального адреса: https://localhost:24738/JCWebClient.js. На данном этапе необходимо учесть ситуацию, если на ПК пользователя отсутствует JC-WebClient, поэтому для загрузки скрипта JCWebClient.js рекомендуется следовать следующему алгоритму:
1.3. Сообщите пользователю о необходимости установить JC-WebClient и предложите вариант с его установкой.
Для этого параллельно основному процессу выполните следующее:
Отобразите пользователю информационное сообщение о необходимости установить JC-WebClient. В этом же сообщении сообщите о том, что загрузка инсталлятора JC-WebClient на ПК пользователя начнётся автоматически, но если не началась в течение, например, 5 секунд, предложите нажать на специальную ссылку для скачивания инсталлятора с Web-сервера.
Выполните автоматическую загрузку инсталлятора JC-WebClient на ПК пользователя с Web-сервера вашего приложения.
Если пользователь работает на платформе macOS, то после установки потребуется перезагрузка ПК (инсталлятор JC-WebClient уведомит об этом).
Если пользователь использует браузер Mozilla Firefox, то после установки потребуется перезапустить все его открытые экземпляры.
1.4. Ожидайте N секунд.
1.5. Средствами JavaScript повторно попытайтесь асинхронно загрузить JCWebClient.js в ожидании, что пользователь установил JC-WebClient.
Пример реализации алгоритма загрузки скрипта JCWebClient.js
Проверьте версию JC-WebClient.
На данном этапе следует проверить, соответствует ли версия JC-WebClient пользователя той, которая поддерживается Вашим Web-приложением. Для этого рекомендуется следовать следующему алгоритму:
3.3. Сообщите пользователю о том, что для корректной работы Web-приложения необходима другая версия JC-WebClient и далее можете:
3.4. Ожидайте N секунд.
3.5. Повторно асинхронно получите версию JC-WebClient командой getJCWebClientVersion в ожидании, что пользователь установил необходимую версию.
Пример реализации проверки версии JC-WebClient
Рекомендуем подписаться на уведомления от JC-WebClient для отслеживания событий подключения/отключения токенов и изменения состояния аутентификации (см. Работа с событиями ).
После описанных выше действий Web-страница готова к последующей работе с JC-WebClient.
Базовые команды для работы с токенами¶
При работе с USB-токенами и смарт-картами (устройствами) необходимо выбрать на устройстве криптографическое приложение (токен). На одном устройстве может быть несколько токенов. Различные токены обладают различной функциональностью: например, GOST и GOST 2 реализует российские криптоалгоритмы, а PRO – западные. Для работы с токенами в JC-WebClient API предусмотрены слоты.
Для получения массива слотов всех токенов (в том числе Антифрод-терминала без смарт-карты), подключенных к ПК, используйте команду getAllSlots :
Например, если к ПК подключено устройство JaCarta PRO/ГОСТ (на нём 2 поддерживаемых токена – PRO и GOST), то команда getAllSlots вернёт массив из двух объектов с разными идентификаторами слотов: один – для PRO, второй – для GOST.
Схема ниже иллюстрирует общий случай связи слотов с токенами и устройствами:
Из схемы видно, что при подключении нескольких устройств (USB-токен, смарт-карта в Антифрод-терминале) каждый токен устройства (а также Антифрод-терминал без смарт карты) будет закреплен за отдельным слотом, которые используются как идентификаторы в JC-WebClient API.
После получения массива слотов выберите токен, с которым вы хотите продолжать работать. Используйте команду getTokenInfo для получения информации о токене. Отсортировать массив токенов по их типу можно следующим образом:
Далее получите информацию о сертификатах, загруженных на токен. Для этого используйте следующие команды:
Полученную о сертификатах информацию необходимо отфильтровать и
После успешной аутентификации токен переходит в режим пользователя, все пользовательские операции становятся доступными.
Узнать в каком режиме работает токен можно:
Разделение контекста между вкладками браузера¶
В JC-WebClient реализовано разделение контекста (сеансов работы с токеном) при работе из различных вкладок браузера. Это означает, что сеанс работы с токеном в режиме пользователя, установленный из одной вкладки, недоступен для других вкладок этого или другого браузера.
Контекст по умолчанию сохраняется при переходе с одной страницы на другую в рамках одной и той же вкладки браузера, а также при обновлении страницы (нажатие клавиши F5).
JC-WebClient предоставляет возможность явного указания на необходимость обнуления контекста при выходе за пределы данной Web-страницы. Для этого установите на этой Web-странице значение параметра JCWebClient2.saveSession в false :
Указанное значение параметра будет действовать только в пределах данной Web-страницы.
В JC-WebClient реализован таймаут в размере 1 минуты, по истечении которого контекст автоматически обнуляется, если приложение определило, что Web-страница перестала отвечать. При этом также удаляется и сеанс работы с токеном. Это произойдёт, например, в следующих случаях:
Более детальная информация по работе с JC-WebClient представлена в следующих разделах:
Быстрый старт¶
Назначение и архитектура JC-WebClient¶
JC-WebClient представляет из себя приложение на основе технологии локального Web-сервера, которое работает на стороне клиента. Приложение:
Архитектура JC-WebClient приведена на рисунке ниже:
Основные компоненты JC-WebClient:
Поддерживаемые устройства¶
JC-WebClient поддерживает работу со следующими средствами электронной подписи (далее – токенами) в форм-факторах USB-токен или смарт-карта:
Средство электронной подписи
В состав каких устройств входит
Будем далее называть токен GOST 2
Будем далее называть токен GOST
В качестве доверенного Trust Screen-устройства JC-WebClient поддерживает устройство Антифрод-терминал – собственный продукт компании «Аладдин Р.Д.».
Пошаговое руководство по доработке Web-страниц¶
Подключение и инициализация JC-WebClient¶
Для возможности работы с JC-WebClient через JavaScript API необходимо последовательно выполнить следующие действия (полный пример первых 3-х пунктов представлен в разделе Начало работы ):
Загрузите скрипт JCWebClient.js с локального адреса: https://localhost:24738/JCWebClient.js. На данном этапе необходимо учесть ситуацию, если на ПК пользователя отсутствует JC-WebClient, поэтому для загрузки скрипта JCWebClient.js рекомендуется следовать следующему алгоритму:
1.3. Сообщите пользователю о необходимости установить JC-WebClient и предложите вариант с его установкой.
Для этого параллельно основному процессу выполните следующее:
Отобразите пользователю информационное сообщение о необходимости установить JC-WebClient. В этом же сообщении сообщите о том, что загрузка инсталлятора JC-WebClient на ПК пользователя начнётся автоматически, но если не началась в течение, например, 5 секунд, предложите нажать на специальную ссылку для скачивания инсталлятора с Web-сервера.
Выполните автоматическую загрузку инсталлятора JC-WebClient на ПК пользователя с Web-сервера вашего приложения.
Если пользователь работает на платформе macOS, то после установки потребуется перезагрузка ПК (инсталлятор JC-WebClient уведомит об этом).
Если пользователь использует браузер Mozilla Firefox, то после установки потребуется перезапустить все его открытые экземпляры.
1.4. Ожидайте N секунд.
1.5. Средствами JavaScript повторно попытайтесь асинхронно загрузить JCWebClient.js в ожидании, что пользователь установил JC-WebClient.
Пример реализации алгоритма загрузки скрипта JCWebClient.js
Проверьте версию JC-WebClient.
На данном этапе следует проверить, соответствует ли версия JC-WebClient пользователя той, которая поддерживается Вашим Web-приложением. Для этого рекомендуется следовать следующему алгоритму:
3.3. Сообщите пользователю о том, что для корректной работы Web-приложения необходима другая версия JC-WebClient и далее можете:
3.4. Ожидайте N секунд.
3.5. Повторно асинхронно получите версию JC-WebClient командой getJCWebClientVersion в ожидании, что пользователь установил необходимую версию.
Пример реализации проверки версии JC-WebClient
Рекомендуем подписаться на уведомления от JC-WebClient для отслеживания событий подключения/отключения токенов и изменения состояния аутентификации (см. Работа с событиями ).
После описанных выше действий Web-страница готова к последующей работе с JC-WebClient.
Базовые команды для работы с токенами¶
При работе с USB-токенами и смарт-картами (устройствами) необходимо выбрать на устройстве криптографическое приложение (токен). На одном устройстве может быть несколько токенов. Различные токены обладают различной функциональностью: например, GOST и GOST 2 реализует российские криптоалгоритмы, а PRO – западные. Для работы с токенами в JC-WebClient API предусмотрены слоты.
Для получения массива слотов всех токенов (в том числе Антифрод-терминала без смарт-карты), подключенных к ПК, используйте команду getAllSlots :
Например, если к ПК подключено устройство JaCarta PRO/ГОСТ (на нём 2 поддерживаемых токена – PRO и GOST), то команда getAllSlots вернёт массив из двух объектов с разными идентификаторами слотов: один – для PRO, второй – для GOST.
Схема ниже иллюстрирует общий случай связи слотов с токенами и устройствами:
Из схемы видно, что при подключении нескольких устройств (USB-токен, смарт-карта в Антифрод-терминале) каждый токен устройства (а также Антифрод-терминал без смарт карты) будет закреплен за отдельным слотом, которые используются как идентификаторы в JC-WebClient API.
После получения массива слотов выберите токен, с которым вы хотите продолжать работать. Используйте команду getTokenInfo для получения информации о токене. Отсортировать массив токенов по их типу можно следующим образом:
Далее получите информацию о сертификатах, загруженных на токен. Для этого используйте следующие команды:
Полученную о сертификатах информацию необходимо отфильтровать и
После успешной аутентификации токен переходит в режим пользователя, все пользовательские операции становятся доступными.
Узнать в каком режиме работает токен можно:
Разделение контекста между вкладками браузера¶
В JC-WebClient реализовано разделение контекста (сеансов работы с токеном) при работе из различных вкладок браузера. Это означает, что сеанс работы с токеном в режиме пользователя, установленный из одной вкладки, недоступен для других вкладок этого или другого браузера.
Контекст по умолчанию сохраняется при переходе с одной страницы на другую в рамках одной и той же вкладки браузера, а также при обновлении страницы (нажатие клавиши F5).
JC-WebClient предоставляет возможность явного указания на необходимость обнуления контекста при выходе за пределы данной Web-страницы. Для этого установите на этой Web-странице значение параметра JCWebClient2.saveSession в false :
Указанное значение параметра будет действовать только в пределах данной Web-страницы.
В JC-WebClient реализован таймаут в размере 1 минуты, по истечении которого контекст автоматически обнуляется, если приложение определило, что Web-страница перестала отвечать. При этом также удаляется и сеанс работы с токеном. Это произойдёт, например, в следующих случаях:
Более детальная информация по работе с JC-WebClient представлена в следующих разделах:
Тестируем JaCarta WebClient или храните токены в сейфе
«Когда на мгновение чёрный покров отнесло в сторону, Маргарита на скаку обернулась и увидела, что сзади нет не только разноцветных башен с разворачиващимся над ними аэропланом, но нет уже давно и самого города, который ушёл в землю и оставил по себе только туман.»
М.А. Булгаков «Мастер и Маргарита»
Привет, Хабр! Наверное почти в каждой российской организации есть эти изделия в весёлой разноцветной раскраске. Речь идёт об изделиях JaCarta и софте к ним. Привалило такое счастье и мне, и я решил немного раздвинуть чёрный покров скрывающий их сущность, сиречь API. Некоторые банки, особенно выдающие своим клиентам токены JaCarta ГОСТ-2, для работы требуют установки приложения JC-WebClient от «Аладдин Р.Д.».
Хотя на официальном сайте разработчика свежего дистрибутива нет (в разделе Демо можно скачать более старую версию, но она использует устаревший API), дистрибутив можно найти с помощью гугла по строке «JC-WebClient-4.0.0.1186» на сайтах ДБО.
После установки приложения на компе пользователя открывается порт 24738 на котором работает этот клиент.
На сайте разработчика открыто и подробно описан API этого приложения (как и функции работы с файловой системой всей линейки токенов этого производителя через jcFS.dll, входящей в установочный пакет «Единый клиент JaCarta») и суть в том, что с помощью ряда функций можно или подписать ЭЦП находящейся на токене что угодно, подобрав пин код, или заблокировать токен неудачными попытками его ввода. И всё это дистанционно, через интернет.
Не секрет, что пользователи часто оставляют у токена пин код по умолчанию, или тот с которым его получили (обычно боятся, что при смене пин кода всё перестанет работать).
Чаще всего используются пин коды вида 123456, а токен в течении рабочего дня, а то и круглосуточно, воткнут в порт компа или usb хаба.
Благодаря JC-WebClient, если такому пользователю подсунуть вебстраницу или письмо с нехитрым JavaScript’ом, то появляется возможность хотя и не получить ключи токена (это в ряде случаев возможно только путём непосредственного доступа к файловой системе токена, пример здесь уже давался), но попытаться подобрать пин код и подписать какие-либо данные и куда-то их отправить.
В случае 10 неудачных попыток перебора токен блокируется, и как часто это бывает, если не установлен пин код администратора для разблокировки, то поможет только инициализация. А это не в срок уплаченные налоги (и как результат пени и даже блокировка расчётного счёта организации налоговой), неустойки от поставщиков, в общем хорошего мало.
Проблему с перебором пин кода можно было бы решить или сделав возможность его ввода только через интерфейсное окно JC-WebClient, или как полумера, в случае например 3-х неудачных попыток его ввода, блокировать дальнейшую авторизацию, выведя сообщение пользователю, и ожидать пока он не подтвердит свои действия.
Я написал небольшой тестовый скрипт, который показывает эту уязвимость. Скрипт работает на всех современных и относительно современных браузерах, даже IE 🙂
Естественно он ничего никуда не отправляет, а просто выводит на экран результаты работы последовательности функций.
В скрипте реализован полный перебор 10 попыток ввода пин кода «на убой» токена, поэтому запускать скрипт можно только с тестовым токеном!
Также следует помнить, что применение этого скрипта иначе кроме как на собственном тестовом токене является нарушением законодательства.
Скрипт генерации ключевой пары и сертификата средствами JC-WebClient для тестирования. Использовать можно EToken PRO Java 72 K, JaCarta ГОСТ, JaCarta ГОСТ-2. Токен должен быть предварительно инициализирован с пин кодом пользователя 111111.
Перед началом тестирования необходимо установить JC-WebClient версии не ниже 4.