35,01
рейтинг
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
Компания «Актив»
рейтинг 35,01

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

  • 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
    Интересно узнать, где еще кроме Портала ГосУслуг можно использовать носители со встроенной криптографией?

    Интересуюсь как компания, предоставляющая услуги по выпуску квалифицированной ЭП
  • 0
    И все же есть капля дегтя в этом бочке Меда!
    На токене оказывается может храниться один и только один сертификат и его ключевая пара при доступе на портал Госуслуг.
    И если вам потребуется получить еще один сертификат, то вам придется покупать еще один токен PKCS#11.
    Вообще-то это легко решаемая проблема(Тот же ФНС умеет работать с несколькими сертификатами на токене PKCS#11).

    Нужна добрая воля портала Госуслуг!!!

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

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