Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Терминология:

  • Рутокен Web плагин Специализированный плагин только для устройств Рутокен Web. Разработка фактически прекращена в 2016 году.
  • Рутокен Плагин Плагин для основной линейки устройств Рутокен, включая ЭЦП 2.0, PINPad, ЭЦП PKI. Активно разрабатывается, рекомендован для всех устройств.

Покажем, как перейти на новый плагин, если у вас встроена поддержка Рутокен Web и используется Рутокен Web плагин и серверная часть, работающая с данными, сгенерированными плагином. Предложенная схема позволит минимально изменить клиентский код и не затрагивать серверный. В результате мы получим возможность использовать всю линейку продуктов Рутокен, работающих с Рутокен Плагином и сохраним возможность работы с устройствами Рутокен Web.

Для примера возьмем демонстрационный сайт php.rutokenweb.ru. Код серверной части соответственно на php. Для других языков математика аналогична. Схему аутентификации с использованием Рутокен-WEB и сам сайт с исходниками партнеры брали за базовый вариант и дорабатывали свои решения на ее основе. Поэтому покажем процесс перехода на примере апдейта данного сайта.

 

Кратко о схеме, предложенной для аутентификации с Рутокен-web:

1. Зарегистрированный клиент генерирует ключевую пару, сохраняет открытый ключ на сайте.

2. При логине запрашиваются случайные данные для подписи. Данные сохраняются на сервре в сессии и отправляются клиенту.

3. Клиент получает данные, генерирует соль, добавляется к данным, результат подписывается на сгенерированном в п.1 ключе и вместе с солью отправляется на сервер для проверки.

3. Сервер производит аналогичную процедуру с солью и сохраненными в п.2 данными и проверяет корректность подписи, принимая решение об успешности аутентификации.

Соответственно нет заморочек с сертификатами, только подпись данных и проверка корректности. Подпись производим по ГОСТ Р 34.10-2001.

 

Схема работ по замене плагина.

  1. Устанавливаем Рутокен Плагин
  2. Меняем загрузчик плагина на нужный нам.
    Заменяем на страницах или в вашей системе сборки скрипт rutokenweb.js rutoken.js.
    https://www.npmjs.com/package/rutoken
    Оба скрипта используют Promise. Если у вас уже был установлен и работал (в ie) rutokenweb.js, то зависимость уже есть, но проверить стоит. Если нет, установите скрипт для работы с промисами, например этот https://github.com/jakearchibald/es6-promise
  3. Используем модуль проверки совместимости плагина и браузера 
    https://www.npmjs.com/package/rutoken-browser-check. Опционально, позволяет удобно локализовать проблемы при инициализации. У скрипта есть зависимость- https://www.npmjs.com/package/bowser
  4. Меняем логику инициализации работы с плагином. Вынес в отдельный файл boot.js, чтобы не копипастить. Подключим его на всех страницах, где нужно, уберем лишние переменные, удалим функцию token_refresh из подписки на onload страницы.
    В общем случае, плагин получается в финальном resolve цепочки промисов, где мы передаем его конструктору нашей обертки вместе с методом получения пин-кода. Этот метод нужен, чтобы эмулировать отображение окна со списком логинов и обработать выбор конкретного id. Возвращает промис с id устройства и pin-кодом, введенным пользователем.
    Все ошибки инициализации прилетают в reject промиса. Ошибки от плагина прилетают другие, поэтому места, где они обрабатывались, так же нужно поправить.
  5. Используем обертку над плагином rtwToCrypto.js.
    Код обертки: https://github.com/blade-runner/rutokenweb-to-plugin 
    Мы подменяем методы рутокенвэб на нужные нам, таким образом сигнатуры сохраняются и ваш код работает, как и работал, но с новым плагином и всеми устройствами Рутокен.

Список методов, переопределенных оберткой:

rtwIsTokenPresentAndOK

rtwGetNumberOfContainers

rtwGetContainerName

rtwSign

rtwGenKeyPair