Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

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

  • Рутокен 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

 

 

 

 

  • No labels