32,29
рейтинг
17 апреля 2014 в 15:07

Разработка → Авторизация на портале Госуслуг с помощью Рутокен ЭЦП

Одному из сотрудников нашей компании понадобилось зарегистрироваться на портале Госуслуг. Как известно, на портале сейчас есть возможность входить в личный кабинет по логину/паролю, либо по электронной подписи. Вариант с логином/паролем был отброшен в силу профессиональной паранойи, и поехал сотрудник в УЦ Ростелекома — оператора системы — получать сертификат. В УЦ ему в качестве носителя электронной подписи/аппаратного СКЗИ не предложили Рутокен ЭЦП. В силу корпоративного патриотизма сотрудник решил не форсировать события, а попробовать-таки зайти на Госуслуги, используя для электронной подписи Рутокен ЭЦП.
Что из этого получилось, описано под катом.





  • На портале Госуслуг для проведения ЭП используется специальный браузерный плагин, который достаточно универсален. В качестве средств ЭП он умеет “подцеплять” как аппаратные СКЗИ, так и программные криптопровайдеры.
    Рутокен ЭЦП в этом плагине поддерживается.
  • Поддерживается Рутокен ЭЦП через нашу библиотеку, реализующую стандарт PKCS#11.
  • Процедура входа в личной кабинет на портале Госуслуг по ЭП представляет собой подпись случайных данных, отправляемых сервером. Подпись формируется в формате PKCS#7. Для аутентификации пользователя сервер использует информацию из сертификата X.509, а успешная проверка подписи подтверждает наличие у пользователя закрытого ключа, соответствующего сертификату.
  • Для того чтобы сервер принял пользовательский сертификат, тот должен быть усиленным квалифицированным.


Задача разбилась на подзадачи:
  • Сгенерировать ключ на Рутокен ЭЦП в формате, совместимом с форматом плагина Госуслуг, то есть через библиотеку PKCS#11
  • Узнать, какие аккредитованные УЦ выдают квалифицированные сертификаты для физлиц
  • Договориться с одним из этих УЦ, что он выдаст сертификат на основе запроса, сделанного удаленно.
  • Сформировать правильный запрос на квалифицированный сертификат.
  • Транспортировать запрос в УЦ.
  • Получить сертификат и записать его на Рутокен ЭЦП в формате, совместимом с форматом плагина Госуслуг, то есть через библиотеку PKCS#11.


С УЦ мы договорились довольно быстро. Один из основных наших партнеров, УЦ СКБ Контур, аккредитован в системе Госуслуг и согласился выдать нам сертификат по описанной схеме.
Для решения технических вопросов мы решили использовать Рутокен Плагин, который также работает через библиотеку PKCS#11 и совместим с плагином Госуслуг.

Центр регистрации


Для генерации ключа, создания запроса и записи сертификата мы сделали набор web-страниц, который условно назвали Центр регистрации. Этот Центр регистрации не требует серверной части, все операции осуществляются на клиенте. Для работы Центра регистрации требуется установка Рутокен Плагин.

Центр регистрации позволяет:
  • Просматривать ключевые пары и сертификаты на подключенных устройствах Рутокен ЭЦП (под просмотром ключевых пар понимается просмотр информации о них)
  • Генерировать новую ключевую пару
  • Формировать запрос в формате PKCS#10 для выбранной ключевой пары
  • Формировать запросы по шаблону
  • Импортировать сертификат на устройство
  • Удалять сертификат с устройства


Генерация ключа и формирование запроса на сертификат

Ниже приведена инструкция по генерации ключа и формированию запроса на сертификат c помощью Центра регистрации:

1. Запустить Центр регистрации:



2. Подключить Рутокен ЭЦП к компьютеру, выбрать токен, ввести PIN-код:


После выбора токена отобразится меню:



3. Нажать кнопку “Создать ключ”:



Затем нажать «Создать запрос на этом ключе»



4. На странице создания запроса выбрать шаблон “СКБ Контур, для физлиц”, заполнить поля запроса, нажать кнопку “Создать запрос” (все поля должны быть заполнены, в данном случае реализован тестовый пример):



5. Скопировать запрос для отправки его в УЦ:



6. Сгенерированный ключ появился в списке:



После отправки запроса сотруднику пришло уведомление о необходимости явиться в офис УЦ для подтверждения личности.
После прохождения проверки наш сотрудник получил сертификат.

Импорт сертификата

1. Выбрать в списке токен, нажать кнопку “Импортировать сертификат”, полученный сертификат вставить в форму ввода, нажать кнопку “Импортировать”:



2. При импорте выбрать тип сертификата “Пользовательский”:



3. После этого появится окно с отображением сертификата и сообщением об успешном импорте на Рутокен ЭЦП (на картинке приведен пример импорта тестового сертификата, полученного в тестовом УЦ):



4. Сертификат отобразится в списке:



Вход на портал Госуслуг

Сотрудник установил плагин Госуслуг, и ему удалось войти на портал по ЭП.



Выбираем “По электронной подписи”:



Выбираем сертификат:



Вводим PIN-код:



Попадаем в личный кабинет:



Вместо заключения

Концепция аппаратных СКЗИ, выполненных в различных форм-факторах, может быть востребована в массовых проектах, ориентированных на физлиц. В первую очередь за счет упрощения использования криптографии. Плагины, осуществляющие интеграцию браузера и аппаратных криптографических решений должны развиваться в сторону увеличения легкости установки и расширения возможностей. Тогда эти решения будут чаще и больше использовать.

Для того, чтоб была возможность выдачи квалифицированных сертификатов на Рутокен ЭЦП, которые можно было бы использовать с плагином Госуслуг или с Рутокен Плагин, сделана локальная версия Центра регистрации, ее можно использовать непосредственно в точках выдачи сертификатов.
Автор: @VicTun
Компания «Актив»
рейтинг 32,29

Комментарии (33)

  • 0
    А нет возможности повторить ваш фокус на debian/ubuntu? В свете последних мировых событий переход на opensource выглядит все более необходимым…
    • –1
      Дык всё делается через openssl/opensc (https://www.opensc-project.org/opensc/wiki/AktivRutokenECP), только параметры при создании csr нужно правильные вписать.
      • 0
        Да, а плагин мне действительно приехал (.deb). Приятно, спасибо.
      • –1
        Плагин Госуслуг с Рутокен ЭЦП работает через нашу библиотеку PKCS#11, которая несовместима с opensc.
        • 0
          Если бы вы прошли по ссылке, то увидели бы, что для opensc ваша библиотека PKCS#11 не нужна, ровно как и плагин.
          • +1
            Наша команда добавляла в opensc поддержку Рутокен ЭЦП, поэтому мы в курсе как там все устроено. Если вы средствами opensc сделаете ГОСТ-овый ключ на токене, то у плагина Госуслуг будут проблемы с его использованием.
            • 0
              Занятно. Ключ будет Не Такой или он будет лежать не по тому пути?
              • +1
                Формат хранения ключа разный.
        • 0
          Не как у всех конечно, но на этот раз хоть драйвера есть для всего www.rutoken.ru/support/download/pkcs/
          • 0
            Не могли бы вы развернуть свою мысль «не как у всех»?
            • 0
              Имел в виду лишь отличающийся формат хранения ключа. Возможно, для этого конечно и были какие-то веские причины при написании ГОСТ( и, соответственно, вашего собственного формата). Но вот ставить отдельную либу при наличии открытой широкоизвестной слегка напрягает.
        • 0
          Что мешало сделать библиотеку совместимой? Опять ищем свой национальный путь?
          • 0
            Вы не поняли. В opensc поддерживается Рутокен ЭЦП. В частности, в библиотеке opensc-pkcs11 — open source реализации стандарта PKCS#11.
            Но формат хранения ключей и сертификатов, принятый в opensc, долгое время не был адаптирован и стандартизован под ГОСТы. Поэтому мы вынуждены были написать свою библиотеку PKCS#11. Наш формат хранения данных на токене в плане поддержки ГОСТов более универсален.
            Соответственно, наша библиотека PKCS#11 имеется под все основные платформы (Win, Linux, MAC OS, iOS, Android).
            • 0
              Хотелось бы верить. С моей, «админо-потребительской» точки зрения, все как-то не сильно здорово с поддержкой этого всего счастья под линуксом. Купил для опытов Rutoken Lite. Долго бился, пока не понял, что купил сильно порезанную версию. Теперь добыл ЭЦП-вариант. Нужно будет поднимать с двухфакторную аутенфикацию с его использованием. Так что поглядим :)

              Еще вопрос, про поддержку. Вы не думали связаться с командой, собирающей Russian Fedora, и выложить свою библиотеку в виде нормального rpm-пакета в репозиторий? Думаю, в процессе отладки запуска работы токена «из каробки на свежепоставленной федоре» решатся множество проблем.
              • 0
                У нас достаточная база знаний по интеграции устройств Рутокен и Linux, представленная на портале документации dev.rutoken.ru/pages/viewpage.action?pageId=2228266. Там есть и материалы, посвященные двухфакторной аутентификации.
                Также есть темы на форуме.

                По Fedora подумаем.

                • 0
                  А «Центр управления Рутоке» — только под Windows?
                  • 0
                    Если речь идет о «Панели управления Рутокен», то да. Но следует понимать, что в opensc есть универсальная утилита pkcs11-tool, которой можно «подложить», например, нашу библиотеку PKCS#11 под Linux и с ее помощью «управлять» Рутокенами.
                    • 0
                      dev.rutoken.ru/pages/viewpage.action?pageId=4227143 тут сказано, что «понадобится Рутокен ЭЦП, отформатированный через Панель управления Рутокен», никаких упоминаний про эту утилиту.
                      Проблема во многом в том, что информация публикуется отрывочно. Что бы использовать рутокен нужно перерыть кучу форумов, склеить информационные «обрывки». Плотная работа с какой-нибудь командой, поддерживающей linux-дистрибутив, помогла бы выловить детские болезни и сделать действительно удобный продукт. Многие вещи, думаю, вы не можете протестировать априори просто потому, что знания уже в голове есть.
            • 0
              так что, есть шанс войти в интернет банк из под мака, не запуская винду для этого?
  • +3
    Как обычно — сделано неудобно.
    • 0
      Что именно неудобно?
      • +1
        То, что действий для авторизации больше чем два/3
        Должно быть:
        1) Подключил ключ
        2) Нажал в браузере авторизоваться
        3) Подтвердил действие
        • 0
          Для авторизации действий примерно столько, сколько вы написали.

          А процедура получения сертификата производится раз в год.

          Вы не разобрались в материале.
  • 0
    Можете опубликовать такой же сценарий для Linux?
    • 0
      Ничем не отличается от windows-cценария. «Центр регистрации» — это кроссплатформенное локальное web-приложение, так же как и Рутокен Плагин.
      • 0
        Цент регистрации не критичная штука. Готовый сертификат с токеном можно получить в том же СКБ Контур. А вот запустить эту прелесть под линуксом не имея объемных знаний об устройстве этой всей кухни… та еще песня. Сразу скажу, у меня не получилось запустить пару «ЭУК — Госуслуги» на RussianFedora19, пришлость запускать виртуалку. И там тоже как-то все через одно место: медленно и неудобно.
        • 0
          Тут какая штука.
          Если получить токен с готовым сертификатом в УЦ, то вы вынуждены будете установить и сконфигурировать на Linux СКЗИ для работы с этим сертификатом. Причем СКЗИ в большинстве случает должно быть тем же, с помощью которого в УЦ делался ключ.
          Иначе можно нарваться на несовместимость.
          Установка и конфигурирование СКЗИ может быть нетривиальной задачей.

          • 0
            Т.е. отечественные разработчики таки пошли своим путем и «положили» на стандарты? Или просто соотвествующих стандартов просто не существует?
            • 0
              На данный момент нет совместимости по формату хранения закрытого ключа. Но соответствующие работы ведутся в рамках ТК26. Следует понимать, что многие СКЗИ работают с Рутокен ЭЦП через нашу библиотеку PKCS#11. В этом случае совместимость есть.
  • 0
    Скажите, а есть возможность взять ключ для налоговой инспекции (хранящийся на rutoken S 64k с правом экспорта), и как-нибудь хитро перенести его в тот же рутокен или другой, но чтобы он заработал из под mac os?
    Второй вопрос — можно ли взять ключ госуслуг из штатной jakart'ы и перенести в rutoken S/ЭЦП? (опять же для использования под маком).
    • 0
      На маке госуслуговский плагин отказывается работать с токенами =(
  • 0
    Есть проблема с подключением к порталу с ПК Windows 7 Home, Service pack 1 (все обновления установлены).

    После того как токен вставлен в USB-порт статус определения устройства таков:

    image

    При попытке авторизоваться на портале (Internet Explorer 11.0.9600.17280), секунд 10 отображается следующее окно:

    image

    после чего оно исчезает без всяких дополнительных сообщений, авторизации не происходит.

    Буквально несколько дней назад авторизация проходила нормально (как на основной портал, так и на бета-версию), но опять же только через IE, при попытке подключиться в Firefox выдавалось сообщение, что необходимо установить плагин.

    В чем может быть проблема? Как провести диагностику? Звонить в техподдержку Госуслуг?
  • 0
    Интересно узнать, где еще кроме Портала ГосУслуг можно использовать носители со встроенной криптографией?

    Интересуюсь как компания, предоставляющая услуги по выпуску квалифицированной ЭП

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка