Технический этап
1. Теперь для своей ИС необходимо сгенерировать закрытый ключ и сертификат открытого ключа. Закрытый ключ будет использоваться модулем авторизации, а сертификат требуется для идентификации ИС при взаимодействии с ЕСИА (см. пп. 2 п. 3.1.1 Методических рекомендаций).
2. Формируем файл метаданных. В нем содержится сертификат, полученный на предыдущем шаге. Образец файла метаданных приведен в Методических рекомендациях.
3. Отправляем заявку на подключение ИС к тестовой среде ЕСИА. Форма заявки указана в Приложении «Е» Регламента. К заявке прикрепляется полученный на предыдущем шаге файл метаданных. В результате регистрации в министерстве связи ваша ИС получает возможность использовать созданный ключ для взаимодействия с Оператором ЕСИА.
4. Теперь нужно разработать или приобрести модуль авторизации ЕСИА, который будет встраиваться в ИС и обеспечивать процедуры формирования и отправки запросов и получения данных.
5. Когда модуль авторизации встроен и пришёл ответ Минкомсвязи о получении тестового доступа можно произвести отладку взаимодействия модуля авторизации и ЕСИА.
6. После отладки нужно направить заявку на подключение ИС к промышленной среде ЕСИА. Форма заявки указана в Приложении «М» Регламента. Как и в случае с подключением к тестовой среде, к заявке необходимо приложить файл метаданных, полученный на шаге 2, заменив в нем тестовые данные на промышленные.
На этом подключение ИС к единой системе идентификации и аутентификации завершено.
Бланки заявок можно запросить здесь: http://esia.pro/blanki_zayavok
Для организации пунктов подтверждения учетных записей ЕСИА с использованием web-приложения (АРМ ЕСИА) необходимо пройти ряд регламентных процедур и мероприятий.
- Ознакомиться со следующими документами:
- Регламент информационного взаимодействия Участников с Оператором ЕСИА и Оператором эксплуатации инфраструктуры электронного правительства (далее – Регламент). Актуальную версию можно скачать по ссылке http://minsvyaz.ru/ru/documents/4244/.
- Руководство пользователя ЕСИА http://minsvyaz.ru/ru/documents/4240/.
- Каждый орган исполнительной власти (ОГВ) или иная и организация, планирующая подтверждать учетные записи пользователей ЕСИА с помощью АРМ ЕСИА, должна пройти процедуру регистрации ОГВ в ЕСИА (см. дорожную карту по регистрации ОГВ в ЕСИА).
- Руководитель, уполномоченное лицо и сотрудники ОГВ, которые будут осуществлять подтверждение личности граждан (Операторы) должны иметь или, при отсутствии, получить УКЭП, содержащий сведения о принадлежности лица к данной организации (ЭП-СП).
- Руководитель, уполномоченное лицо и сотрудники ОГВ должны зарегистрироваться в ЕСИА в качестве физического лица и иметь подтвержденную учетную запись в ЕСИА. Для регистрации в ЕСИА необходимо перейти по ссылке https://esia.gosuslugi.ru/registration/. (Подтвердить учетную запись физического лица можно с использованием УКЭП).
- После получения подтверждения статуса ОГВ руководитель приглашает сотрудников ОГВ, которые будут выполнять подтверждение личности гражданина, к профилю ОГВ (Действия описаны в п.п.1.1-1.6 Инструкции (см. Приложение 2 к Дорожной карте). Руководитель так же вправе назначить любого сотрудника уполномоченным выполнять роль администратора профиля ОГВ, путем проставления соответствующего признака при добавлении этого сотрудника.
- Орган/организация, на базе которой планируется организовать пункт активации ПЭП и имеющие собственный ОГРН, должны подать заявку на регистрацию в регистре органов/организаций имеющих право создания (замены) и выдачи ПЭП (Приложение З Регламента http://minsvyaz.ru/ru/documents/4244/). Подробный порядок действий описан в п. 12 Регламента
Важно:В случае если орган имеет сеть территориальных отделений или филиалов с тем же ОГРН, подавать заявку необходимо только одну, на головную организацию.
- После исполнения заявки по Приложению З Регламента руководитель или уполномоченное лицо с правами администратора профиля ОГВ включает приглашенных сотрудников в соответствующую группу доступа Системы «АРМ Центра обслуживания (уполномоченной организации)». (Действия описаны в п.п.2.1-2.8 Инструкции (см. Приложение 2 к данной Дорожной карте).
- После выполнения заявки по Приложению З центру обслуживания будут доступна только роль подтверждения личности граждан, когда гражданин уже начал регистрацию на ЕПГУ www.gosuslugi.ru и обратился в центр обслуживания за подтверждением личности). Для наделения сотрудников организуемого центра обслуживания полным списком полномочий (первичная регистрация граждан, подтверждением личности, восстановление пароля и удаление учетной записи) необходимо выполнить заявку по Приложению И (п. 12 Регламента http://minsvyaz.ru/ru/documents/4244/). Важно: В заявке по Приложению И нужно указать номер заявки на использование ЕСИА и создание записи регистра органов и организаций, имеющих право создания (замены) и выдачи ключа простой электронной подписи. Это номер в рамках которого была выполнена заявка по Приложению З вида: SCR#NNNNNN).
- Добавление центров обслуживания, а так же операции с ранее добавленными центрами обслуживания (изменения данных об адресе, географических координатах, признака отображения на карте, оказываемых сервисах, времени работы, контактов или дополнительной информации) выполняются в соответствии п. 15 Регламента. (см соответствующий пункт Актуального регламента). Для добавления центров обслуживания необходимо выполнение действий через технологический портал (вкладка «Сервисы»), доступный по ссылке: https://esia.gosuslugi.ru/console/tech/. Подробное руководство по использованию технологического портала — http://minsvyaz.ru/ru/documents/4545/. Доступ к Техпорталу имеют сотрудники организации, включенные в специальную группу «Технологический портал» в профиле органа власти на вкладке «Доступ к системам».
- Для работы с АРМ ЕСИА необходимо обеспечить наличие рабочего места оператора, соответствующего требованиям:
- операционная система: Windows XP, Windows Vista, Windows 7;
- веб-браузер версий, официально поддерживаемых производителями: Internet Explorer, Google Chrome, Mozilla FireFox, Opera, Apple Safari;
- наличие аппаратных средств для подключения носителя закрытого ключа квалифицированной электронной подписи;
- наличие бесперебойного канала связи с доступом в Интернет;
- квалифицированная электронная подпись у специалиста, который будет производить активацию ПЭП;
- установить плагин для работы с электронной подписью (Приложение 3 дорожной карты).
- Пользователи для работы с АРМ ЕСИА должны иметь навыки в работе с применением технических и программных средств уровня Windows XP и выше или их аналогов.
- Для начала использования веб-приложения АРМ ЕСИА необходимо запустить на рабочем месте оператора ПЭП совместимый браузер (см. п. 6 дорожной карты) и ввести в адресной строке следующий адрес: https://esia.gosuslugi.ru/ra.
ВАЖНАЯ ИНФОРМАЦИЯ!!! В Центре обслуживания должно быть несколько специалистов, осуществляющих деятельность по созданию (замене) и выдаче ПЭП.
Требование связано с тем, что возможны различные ситуации: ответственный работник ушел в отпуск, либо сломался компьютер, где установлено веб-приложение АРМ ЕСИА, либо какие-либо проблемы с электронной подписью ответственного сотрудника и т.п. В случае, если в ЦО возникла подобная ситуация и имеется только один специалист по выдаче ПЭП, это может привести к невозможности предоставления услуги. Заявители имеют право и в большинстве случаев точно обратятся с жалобой на ЦО. В результате ТП ЕСИА может заблокировать ЦО и скрыть его с карты.
Действия в случае невозможности предоставления услуги по созданию (замене) и выдаче ПЭП в ЦО:
- Если так случилось, что в ЦО возникла ситуация, препятствующая предоставлению услуги и нет другого специалиста по выдаче ПЭП, специалист, к которому обратился заявитель должен объяснить ему причины невозможности предоставления услуги, порекомендовать обратиться в другой, находящийся поблизости ЦО, назвать его адресные и контактные данные.
- Как только обнаружили, что ЦО не может предоставить услугу по подтверждению личности в ЕСИА, следует сразу скрыть ЦО с карты. Данное действие может осуществить только сотрудник с правами администратора технологического портала ЕСИА. Пройдите по ссылке http://esia.gosuslugi.ru/console/tech. Авторизуйтесь на техпортале ЕСИА. Нажмите на кнопку «Редактирование» (карандаш). Смените статус на «Недействующий» (когда причины, препятствующие предоставлению услуги, будут устранены, требуется снова сменить статус на «Действующий»).
Приложение 1
Инструкция
по получению доступа к приложению Центра обслуживания ЕСИА
-
Присоединение специалиста в качестве сотрудника к учетной записи Оператора выдачи ключа ПЭП в ЕСИА
Администратор Оператора выдачи ключа ПЭП должен осуществить следующие действия:
- Перейти к просмотру списка организаций, которыми управляет администратор. Для этого необходимо Личном кабинете Единого портала государственных услуг (https://www.gosuslugi.ru/pgu/) нажать на кнопку «Перейти к редактированию»:
И перейти во вкладку «Организации» главного меню:
Возможны также следующие способы перехода к списку организаций:
- вход в личный профиль по прямой ссылке (https://esia.gosuslugi.ru) и переход во вкладку «Организации»;
- вход по прямой ссылке:
https://esia.gosuslugi.ru/profile/user/emps.xhtml1
- В случае, если в списке отображается несколько организаций, выбрать организацию, к которой необходимо присоединить сотрудника.
- Перейти во вкладку «Сотрудники организации».
- Нажать на кнопку «Пригласить нового участника».
- Ввести данные приглашаемого специалиста – адрес электронной почты, фамилию и имя (отчество, СНИЛС – при необходимости 2). В качестве адреса электронной почты необходимо указать любой адрес, к которому имеет доступ специалист (в профиле этого сотрудника данный адрес может быть не указан).
- Нажать «Пригласить».
Специалист ЦО получит ссылку по указанному адресу электронной почты. После того, как он воспользуется ссылкой и авторизуется в ЕСИА (т.е. войдет по паролю или электронной подписи), он будет присоединен к организации – Оператору выдачи ключа ПЭП.
-
Включение специалиста в группу доступа «Операторы системы подтверждения личности».
После присоединения специалиста к учетной записи Оператора выдачи ключа ПЭП в качестве сотрудника, его необходимо включить в специальную группу «Операторы системы подтверждения личности» для доступа к приложению ЦО.
Для этого администратор Оператора выдачи ключа ПЭП должен осуществить следующие действия:
- Перейти к просмотру списка организаций, которыми управляет администратор. Для этого необходимо Личном кабинете Единого портала государственных услуг (https://www.gosuslugi.ru/pgu/) нажать на кнопку «Перейти к редактированию»:
И перейти во вкладку «Организации» главного меню:
Возможны также следующие способы перехода к списку организаций:
- вход в личный профиль по прямой ссылке (https://esia.gosuslugi.ru) и переход во вкладку «Организации»;
- вход по прямой ссылке:
https://esia.gosuslugi.ru/profile/user/emps.xhtml
- В случае, если в списке отображается несколько организаций, выбрать организацию, в которой состоит специалист.
- Перейти во вкладку «Доступ к системам».
- В перечне систем найти систему «АРМ Центра обслуживания (уполномоченной организации)».
- Нажать на ссылку «Включить в группу» для добавления нового сотрудника в группу «Специалисты по подтверждению личности». Появится всплывающее окно:
- Во всплывающем окне нажать на кнопку «Добавить участников». Ввести не менее трех букв ФИО добавляемого специалиста ЦО, выбрать его ФИО и нажать «Добавить».
- Убедиться в том, что специалист внесен в перечень участников группы.
- Закрыть всплывающее окно.
После выполнения этих действий специалист сможет осуществить вход в приложение ЦО с использованием своей КЭП.
Ссылка для входа в приложение ЦО: https://esia.gosuslugi.ru/ra
Приложение 2
Установка плагина для работы с электронной подписью
Если для входа в веб-приложение «Профиль ОГВ» пользователь может использовать средство квалифицированной электронной подписи (КЭП).
Для корректной работы необходимо предварительно установить специальный плагин. Для начала установки плагина можно воспользоваться:
- дистрибутивом плагина;
- ссылкой «Plugin для работы с электронной подписью» во всплывающем окне, появляющемся при первой попытке использовать средство электронной подписи (рис. Рисунок ).
Рисунок – Страница установки плагина
Загрузка плагина начнется автоматически (см. рис. Рисунок ).
Рисунок – Окно загрузки плагина
Нажмите кнопку «Запуск». Отобразится мастер установки плагина (рис. Рисунок ).
Рисунок – Мастер установки плагина
Следуйте инструкциям мастера установки. После завершения установки перезапустите браузер.
Для корректной работы с электронной подписью в браузере Internet Explorer необходимо добавить адрес https://esia.gosuslugi.ru в список надёжных узлов. Для этого следует:
- зайти в «Свойства обозревателя»;
- выбрать закладку «Безопасность»;
- выбрать зону для настройки параметров безопасности – «Надежные узлы», нажать на кнопку «Узлы»;
- в поле «Добавить в зону следующий узел» ввести адрес https://esia.gosuslugi.ru и нажать «Добавить»;
закрыть данное окно.
Содержание
- Откуда что берется: интеграция с ЕСИА на языке PHP
- Зарождение идеи
- Как это работает: глазами клиента
- Неожиданная поломка
- Как подключить сайт компании к ЕСИА
- 1. Регистрация руководителя организации на Госуслугах
- 2. Регистрация компании на Госуслугах
- 3. Регистрация информационной системы на технологическом портале Госуслуг
- 4. Получение сертификата и закрытого ключа для новой ИС
- 5. Подключение к тестовой среде ЕСИА
- 6. Разработка или покупка сервиса интеграции с ЕСИА
- 7. Подключение к промышленной среде ЕСИА
- Создаем свой сервис интеграции с ЕСИА
- В OpenSSL нет поддержки ГОСТ
- Генерация секретного .pem ключа из шести файлов КриптоПро
- Генерация ссылки для авторизации на портале ЕСИА
- Создаем окружение при помощи Docker
- Проект для демонстрации интеграции с ЕСИА
- А как же КриптоПро?
Откуда что берется: интеграция с ЕСИА на языке PHP
Привет, меня зовут Никита Нятин. Я главный разработчик PHP в Уральском банке реконструкции и развития. Расскажу, как мы в банке внедряли интеграцию с Единой системой идентификации и аутентификации (ЕСИА) на PHP и какие проблемы пришлось решать.
Зарождение идеи
В УБРиР есть сервис посадочных страниц, позволяющий клиентам оставлять заявки на кредит, вклад и РКО. В 2019 году у нас возникла идея упростить процесс заполнения заявки на кредит. Зачем клиенту указывать ФИО, адрес регистрации, если все эти сведения уже есть на сайте Госуслуг (ГУ), который также называют ЕСИА.
Как это работает: глазами клиента
Клиент нажимает на кнопку “Авторизоваться через Госуслуги”, после чего система его перенаправляет на сайт https://esia.gosuslugi.ru. Там клиента просят авторизоваться, указав свои логин и пароль от учетной записи.
После успешной авторизации нужно дать согласие на передачу своих данных ПАО КБ УБРиР.
Когда согласие дано, клиент перенаправляется обратно на посадочную страницу, где уже заполнены ФИО и паспортные данные, полученные от сайта ГУ. Остается только убедиться, что все верно, и отправить заявку.
Неожиданная поломка
Первая версия интеграции была написана в 2019 году и создавалась в рамках монолитного приложения, написанного на PHP 7.1. Реализовать интеграцию было непросто, но оно того стоило — клиенты стали пользоваться этой возможностью.
Радость длилась почти год, пока в августе 2020 года не истек сертификат, с помощью которого шло взаимодействие с ГУ. При попытке авторизоваться клиенты наблюдали ошибку. Это было для нас сюрпризом, поскольку мы не вели учет срока действия этого сертификата. Но это было не самое страшное. Оказывается, что с 1 апреля 2020 года RSA-сертификаты не могли использоваться для подписей запросов к ЕСИА.
Для устранения сбоя требовались следующие шаги:
получить в Удостоверяющем центре (УЦ) сертификат, выпущенный с использованием криптографического алгоритма ГОСТ Р 34.10-2012;
доработать нашу систему, чтобы она начала поддерживать работу с электронными подписями, выпущенными с использованием этого криптографического алгоритма.
Это было что-то! Интеграцию мы не смогли починить за один день, и за неделю не смогли, и за месяц тоже. Это было связано с тем, что первая версия интеграции была написана на скорую руку, без создания документации. Нам пришлось снова во всем разбираться и заново пройти процесс подключения к ЕСИА.
Как подключить сайт компании к ЕСИА
Нам пришлось изучить официальные документы по интеграции с ЕСИА и прочитать много статей. Какие шаги в итоге пришлось пройти, чтобы интеграция свершилась:
1. Регистрация руководителя организации на Госуслугах
Зарегистрировать компанию в ЕСИА может представитель, имеющий право действовать без доверенности. У него должна быть подтверждённая учётная запись физического лица. В нашем случае руководство банка уже было зарегистрировано на ГУ.
2. Регистрация компании на Госуслугах
Для этого нужна квалифицированная электронная подпись (КЭП), которую можно получить в одном из аккредитованных Минцифрой России удостоверяющих центров. С ее помощью юридическое лицо подписывает документы и подтверждает различные запросы на портале. Для того, чтобы работать с электронной подписью, необходимо установить криптозащиту на устройство. Это программное обеспечение может быть как платное, так и бесплатное. Подробнее — в инструкции или видео. В нашем случае банк был уже зарегистрирован на ГУ.
3. Регистрация информационной системы на технологическом портале Госуслуг
Доступ к порталу получают сотрудники организации, включенные в специальную группу “Технологический портал” и имеющие личную учетную запись на Госуслугах, это — обязательное условие для получения прав доступа к Техпорталу. После регистрации система заносится в реестр информационных систем (ИС) и получает мнемонику, то есть буквенно-цифровой код системы (к примеру, ROMASHKA, VECTOR, 123555_3S).
Существует небольшое Руководство пользователя технологического портала ЕСИА (47 страниц). В нем наглядно показано, как можно добавить новую ИС.
В нашем банке нашелся сотрудник, который уже имел доступ в портал, — он создал для нас новую ИС. Увы, этого было недостаточно. В руководстве написано: “создание записи ИС не означает, что данные ИС получают возможности по использованию программных интерфейсов ЕСИА. Для получения таких возможностей необходимо выполнить действия согласно Регламенту информационного взаимодействия Участников с Оператором ЕСИА и Оператором эксплуатации инфраструктуры электронного правительства”.
В разделе 1 “Введение” этого регламента приведена удобная таблица “Основные задачи заявителей”, где есть нужный нам пункт — “Подключиться к ЕСИА с целью идентификации и аутентификации пользователей своей системы (вход через Госуслуги)”. Там как раз описаны шаги, которые мы сейчас рассматриваем.
4. Получение сертификата и закрытого ключа для новой ИС
Сертификат должен удовлетворять следующим требованиям:
выдан аккредитованным Удостоверяющим центром. Благо в г. Екатеринбурге, где расположен главный офис УБРиР, есть два таких аккредитованных УЦ;
соответствует алгоритму формирования электронной подписи ГОСТ Р 34.10-2021 или алгоритму криптографического хэширования ГОСТ Р 34.11-2012;
должен содержать ОГРН юридического лица (ЮЛ), являющегося оператором ИС (может быть выпущен как на сотрудника ЮЛ, так и на организацию). Таким образом, в сертификате должна содержаться информация о том, что этот ключ относится именно к нашему банку.
При первичном получении сертификата нужно было посетить офис Контура (ООО Сертум-Про), при перевыпуске сертификата посещение не требуется — достаточно сформировать заявку в личном кабинете Контура. Далее там же выпускаются новые сертификат и ключ, которые записываются на виртуальную флешку (виртуальный образ с расширением .img).
Полученный сертификат — это файл с названием из 40 цифр, к примеру, 1151593111080991181175644517328337074622.cer. Этот сертификат нужно загрузить в карточку ИС на Техпортале.
Кстати, если открыть сертификат в текстовом редакторе, то там может оказаться абракадабра:
Это значит, что сертификат в бинарном формате. Если кликнуть по файлу сертификата в ОС Windows, появится диалоговое окно, в котором его можно преобразовать в другой формат — в X.509 (.CER) в кодировке Base-64:
Полученный файл сертификата можно открыть в текстовом редакторе и увидеть цифры и латинские буквы между “——BEGIN CERTIFICATE——” и “——END CERTIFICATE——”. Это значит, что сертификат в кодировке base64.
Закрытый ключ представляет собой папку с 6 файлами с расширением .key из контейнера КриптоПро:
Эти файлы понадобятся на сервере приложения при настройке интеграции с ЕСИА.
5. Подключение к тестовой среде ЕСИА
На этом этапе нужно отправить на адрес sd@sc.minsvyaz.ru заявку “Заявка на согласование права использования ЕСИА и на подключение ИС к ЕСИА с целью использования программных интерфейсов ЕСИА для идентификации и аутентификации заявителей”.
Форма этой заявки приведена в Регламенте взаимодействия заявителей с операторами ЕСИА (Приложение Г). Вот как это выглядело у нас. Мы в Microsoft Word создали документ и заполнили его нужными данными.
В пункте “Планируемые к использованию программные интерфейсы” мы указали следующее:
скоупы: fullname, birthdate, birthplace, email, mobile, contacts, id_doc, snils, inn;
файл сертификата: 1151593111080991181175644517328337074622.cer.
Этот заполненный документ мы отправили на адрес sd@sc.minsvyaz.ru, не забыв прикрепить к сообщению файл сертификата нашей ИС.
Кстати, нас также интересовал другой вопрос: можно ли для тестовой среды использовать сертификат/ключ, который относится к промышленной среде? В октябре 2020 мы получили по email от Федерального ситуационного центра (sd@sc.minsvyaz.ru) такой ответ: “сертификат ИС может быть использован как для тестовой, так и для продуктивной среды”.
На форуме КриптоПро некоторые пользователи говорят, что неправильно использовать промышленный сертификат в тестовой среде. Тем не менее этот вариант допустим, поэтому мы им воспользовались, чтобы не тратить время.
6. Разработка или покупка сервиса интеграции с ЕСИА
Когда администраторы ГУ открывают доступ, компании нужно подключить свою систему к ЕСИА, чтобы она могла принимать и отправлять запросы. Минцифры не позволит подключиться к промышленной среде ЕСИА, если интеграция не будет работать в тестовой среде. В нашем случае мы решили не искать стороннее решение, а написать свой коннектор к ЕСИА на языке PHP.
7. Подключение к промышленной среде ЕСИА
Когда интеграция на тестовом стенде начинает работать, можно отправлять заявку на подключение ИС к промышленной среде. Форма заявки та же, что и в п.5, но только для промышленной среды.
Вот и все шаги, выполнив которые, мы смогли, наконец, порадоваться созданной интеграции с ЕСИА. Но не все так солнечно, поскольку технически непросто реализовать сервис авторизации в п.6. Об этом расскажем дальше.
Создаем свой сервис интеграции с ЕСИА
При создании собственного сервиса нам пришлось учитывать несколько ключевых моментов.
В OpenSSL нет поддержки ГОСТ
Алгоритм ГОСТ есть в библиотеке OpenSSL. Вернее, был. Начиная с версии OpenSSL 1.1.0 gost engine был удален из основного пакета, так как недостаточно активно поддерживался (см. CHANGES.md). Это значит, что по умолчанию шифрование алгоритмом ГОСТ в openssl не доступно. Тем не менее, работа над движком ГОСТ продолжается, но уже в рамках отдельного репозитория gost-engine/engine.
Подключаемся к проду по SSH и смотрим, поддерживает ли библиотека openssl шифрование ГОСТ:
Если эта команда ничего не вернет, значит, поддержки ГОСТ на сервере нет. У нас так и получилось.
Мы побоялись сломать прод из-за возможных сбоев при подключении gost engine к OpenSSL. Также выяснили, что другой проект в нашем банке хочет взаимодействовать с ЕСИА. Поэтому было решено создать отдельный сервис — esia-connector.
Задачи этого сервиса:
сгенерировать ссылку, перейдя по которой, пользователь окажется на сайте Госуслуг, где нужно авторизоваться и согласиться предоставить банку свои данные;
при помощи токена запросить данные пользователя в ГУ и сохранить их в базе данных сервиса;
предоставить другим сервисам Банка доступ к этим данным. Простое REST API, которое позволит другим внутренним сервисам получить доступ к данным клиента.
Генерация секретного .pem ключа из шести файлов КриптоПро
В УЦ мы уже получили сертификат и файлы секретного ключа для нашей ИС. Файлы секретного ключа из контейнера КриптоПро представляют собой папку, в которой расположены 6 файлов с расширением .key:
Нам нужно получить из них один файл в формате .pem. Для этого мы проделали серию шагов:
создали в корне этого проекта (где файл package.json) папку «keys» и поместили туда шесть файлов от КриптоПро с расширением .key;
открыли консоль и перешли в корень этого проекта;
убедились, что у нас на ПК установлен Node.js:
node -v;
установили зависимости:
npm install;
запустили команду на экспорт приватного ключа:
node bin/export-cryptopro-key.js -c ./keys > private-key.pem.
В итоге у нас появился файл private-key.pem. На удивление, объем его крайне мал — всего 4 строчки, например:
Несмотря на свой небольшой размер, он помог нам установить связь с ЕСИА.
Генерация ссылки для авторизации на портале ЕСИА
Нам нужно было как-то сгенерировать ссылку, перейдя по которой, пользователь окажется на сайте Госуслуг. Может быть, так?
Если бы все было так просто. Вы можете перейти по этой ссылке, авторизоваться, но волшебства не случится, ведь мы не сообщаем ЕСИА, что у клиента нужно спросить разрешения поделиться своими данными с банком.
На самом деле, генерация этой ссылки — непростая задача. Лучше ее поручить сторонней библиотеке: https://github.com/fr05t1k/esia. Она поддерживает PHP 8.
Но и тут снова никаких чудес не произошло — эта библиотека просто так работать не будет. Нам нужно создать окружение, где есть openssl с поддержкой ГОСТ, а также php-fpm, nginx.
Создаем окружение при помощи Docker
Нам помог проект https://github.com/rnixik/docker-openssl-gost. Однако на момент написания этой статьи он использовал устаревшие версии библиотек. Поэтому нам пришлось самостоятельно решать, как добавить к свежей версии PHP поддержку ГОСТ. Это было непросто, но после пары недель изысканий нам это удалось.
Решение на удивление оказалось простым:
берем актуальный docker-образ PHP, к примеру php:8-fpm-bullseye;
на основе этого образа в Dockerfile делаем сборку gost-engine из ветки openssl_1_1_1;
редактируем конфиг OpenSSL, чтобы подключить gost-engine.
Проект для демонстрации интеграции с ЕСИА
Лучше один раз попробовать, чем сто раз услышать или увидеть. Мы создали тестовый проект https://github.com/yesnik/esia-mini.
Установив его, вы сами сможете подключиться к тестовому стенду ЕСИА, загрузить оттуда данные тестовой учетной записи и на практике понять, как это все работает.
Как видите, очень даже возможно добавить поддержку ГОСТ к свежему образу PHP и настроить связь с Госуслугами.
А как же КриптоПро?
Оказывается, что для связи с ЕСИА необходимо использовать сертифицированный криптопровайдер. Безопасность должна быть безопасной. Одним из таких решений является КриптоПро. Для реализации интеграции с ГУ на проде нам пришлось его приобрести. У этого решения есть свои особенности подключения к PHP, но это тема отдельной статьи. А так, для тренировки общения с тестовым стендом ЕСИА вполне подойдет наш проект.
Источник
Данный документ описывает порядок регистрации портала записи пациента на прием к врачу, далее ИС (информационная система) в системе ЕСИА.
Применимо для регистрации других ИС с поправками на специфику.
Нормативные документы
- Руководство пользователя ЕСИА
https://digital.gov.ru/ru/documents/6182/ - Руководство пользователя технологического портала ЕСИА
https://digital.gov.ru/ru/documents/6190/ - Методические рекомендации по использованию ЕСИА
https://digital.gov.ru/ru/documents/6186/ - Регламент информационного взаимодействия Участников с Оператором ЕСИА и оператором эксплуатации инфраструктуры электронного правительства
https://digital.gov.ru/ru/documents/4244/
Ресурсы:
Технологический портал (ПРОМЫШЛЕННАЯ СРЕДА): http://esia.gosuslugi.ru/console/tech
Технологический портал (ТЕСТОВАЯ СРЕДА): https://esia-portal1.test.gosuslugi.ru/console/tech
1) Зарегистрируйте вашу организацию в ЕСИА
Необходимо получить квалифицированную электронную подпись (КЭП) на руководителя организации и зарегистрировать юридическое лицо или орган государственной власти в профиле ЕСИА (п.3 Руководства пользователя ЕСИА). Вам потребуется КЭП юридического лица (в т.ч. это может быть подпись ЭП-СП). За получением средства КЭП нужно обратиться в один из аккредитованных Минкомсвязью России удостоверяющих центров вашего региона.
!
Если у вашей организации уже есть доступ к ЕСИА сразу перейти к п.2
2) Зарегистрируйте информационную систему в ЕСИА
Ответственном сотруднику необходимо предоставить доступ к технологическому порталу (п. 3.5.2.3 Руководства пользователя). В результате регистрации через технологический портал ваша информационная система заносится в реестр ИС, взаимодействующих с ЕСИА. Для ИС присваивается буквенно-цифровой код — мнемоника.
Сотрудник должен быть привязан к организации!
3) Сертификаты ИС
В ЕСИА создан механизм аутентификации пользователей, основанный на спецификациях OAuth 2.0 и расширении OpenID Connect 1.0.
Необходимо сгенерировать закрытый ключ и сертификат открытого ключа, зарегистрировать его в технологическом портале.
Подробно необходимые действия описаны в разделе 3.1. Методических рекомендаций.
ВАЖНО
С ноября 2019 года подключение ИС в ЕСИА осуществляется только с сертификатами, поддерживащими алгоритмы шифрования ГОСТ-2012.
Портал записи на прием на данный момент работает только с ключами криптопровайдера КриптоПРО.
4) Подключитесь к тестовой среде ЕСИА
Необходимо отправить форму заявки на адрес sd@sc.minsvyaz.ru. Актуальная форма размещена в Регламенте взаимодействия — ПРИЛОЖЕНИЕ Е. ФОРМА ЗАЯВКИ НА СОГЛАСОВАНИЕ ПРАВА ИСПОЛЬЗОВАНИЯ ЕСИА И НА ПОДКЛЮЧЕНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ К ЕСИА С ЦЕЛЬЮ ИСПОЛЬЗОВАНИЯ ПРОГРАММНЫХ ИНТЕРФЕЙСОВ ЕСИА ДЛЯ ИДЕНТИФИКАЦИИ И АУТЕНТИФИКАЦИИ ЗАЯВИТЕЛЕЙ
!
К заявке прилагаются файлы открытого (сертификата) и закрытого ключа в формате DER.
SCOPE
В заявке необходимо перечислить следующие SCOPE (типы запрашиваемых персональных данных гражданина)
Scope:
— openid
— fullname
— birthdate
— gender
— snils
— inn
— id_doc
— birthplace
— medical_doc
— drivers_licence_doc
— birth_cert_doc
— email
— mobile
— contacts
— usr_org
— kid_fullname
— kid_birthdate
— kid_gender
— kid_snils
— kid_inn
— kid_birth_cert_doc
— kid_medical_doc
Пример заполнения заявки:
После получения доступа в тестовую среду необходимо произвести настройку сервиса подписи на портале.
Для этого понадобится:
- сертификат в формате DER
- пароль от сертификата
- контейнер закрытых ключей
- лицензионный ключ КриптоПРО
Данные ключи необходимо передать ответственному сотруднику СТП. Или настроить сервис подписи самостоятельно.
После настройки и проверки тестовой среды можно переходить к регистрации в промышленной среде.
5) Подключитесь к промышленной среде ЕСИА
Необходимо отправить форму заявки на адрес sd@sc.minsvyaz.ru. Форма заявки как при подключении к тестовой среде.
Проверить наличие ИС на технологическом портале ПРОМЫШЛЕННОЙ СРЕДЫ, а так же наличие и актуальность прикрепленных там сертификатов.
После получения доступа в промышленную среду, необходимо настроить сервис подписи портала для подписи запросов в ЕСИА.
Для этого понадобится:
- сертификат в формате DER
- пароль от сертификата
- контейнер закрытых ключей
- лицензионный ключ КриптоПРО
Данные ключи необходимо передать ответственному сотруднику СТП. Или настроить сервис подписи самостоятельно.
Проверить работоспособность портала — авторизоваться на портале записи на прием под учетной записью реального гражданина.
6) Доменные имена
Согласно ФЗ №8 «ОБ ОБЕСПЕЧЕНИИ ДОСТУПА К ИНФОРМАЦИИ О ДЕЯТЕЛЬНОСТИ ГОСУДАРСТВЕННЫХ ОРГАНОВ И ОРГАНОВ МЕСТНОГО САМОУПРАВЛЕНИЯ» информационные ресурсы (сайты) принадлежащие государственным или муниципальным организациям должны располагаться на доменах принадлежащих этим организациям.
В связи с этим МИАЦ региона должен зарегистрировать доменное имя любого уровня для портала записи пациентов, а так же обеспечить доступ к сайту по защищенному протоколу HTTPS, для чего потребуется https сертификат.
Cертификаты SSL (HTTPS)
Текущие доменные имена вида код_региона.2dr.ru остаются в рабочем состоянии как резервные.
Время на прочтение
9 мин
Количество просмотров 5.7K
Привет, меня зовут Никита Нятин. Я главный разработчик PHP в Уральском банке реконструкции и развития. Расскажу, как мы в банке внедряли интеграцию с Единой системой идентификации и аутентификации (ЕСИА) на PHP и какие проблемы пришлось решать.
Зарождение идеи
В УБРиР есть сервис посадочных страниц, позволяющий клиентам оставлять заявки на кредит, вклад и РКО. В 2019 году у нас возникла идея упростить процесс заполнения заявки на кредит. Зачем клиенту указывать ФИО, адрес регистрации, если все эти сведения уже есть на сайте Госуслуг (ГУ), который также называют ЕСИА.
Как это работает: глазами клиента
Клиент нажимает на кнопку “Авторизоваться через Госуслуги”, после чего система его перенаправляет на сайт https://esia.gosuslugi.ru. Там клиента просят авторизоваться, указав свои логин и пароль от учетной записи.
После успешной авторизации нужно дать согласие на передачу своих данных ПАО КБ УБРиР.
Когда согласие дано, клиент перенаправляется обратно на посадочную страницу, где уже заполнены ФИО и паспортные данные, полученные от сайта ГУ. Остается только убедиться, что все верно, и отправить заявку.
Неожиданная поломка
Первая версия интеграции была написана в 2019 году и создавалась в рамках монолитного приложения, написанного на PHP 7.1. Реализовать интеграцию было непросто, но оно того стоило — клиенты стали пользоваться этой возможностью.
Радость длилась почти год, пока в августе 2020 года не истек сертификат, с помощью которого шло взаимодействие с ГУ. При попытке авторизоваться клиенты наблюдали ошибку. Это было для нас сюрпризом, поскольку мы не вели учет срока действия этого сертификата. Но это было не самое страшное. Оказывается, что с 1 апреля 2020 года RSA-сертификаты не могли использоваться для подписей запросов к ЕСИА.
Для устранения сбоя требовались следующие шаги:
-
получить в Удостоверяющем центре (УЦ) сертификат, выпущенный с использованием криптографического алгоритма ГОСТ Р 34.10-2012;
-
доработать нашу систему, чтобы она начала поддерживать работу с электронными подписями, выпущенными с использованием этого криптографического алгоритма.
Это было что-то! Интеграцию мы не смогли починить за один день, и за неделю не смогли, и за месяц тоже. Это было связано с тем, что первая версия интеграции была написана на скорую руку, без создания документации. Нам пришлось снова во всем разбираться и заново пройти процесс подключения к ЕСИА.
Как подключить сайт компании к ЕСИА
Нам пришлось изучить официальные документы по интеграции с ЕСИА и прочитать много статей. Какие шаги в итоге пришлось пройти, чтобы интеграция свершилась:
1. Регистрация руководителя организации на Госуслугах
Зарегистрировать компанию в ЕСИА может представитель, имеющий право действовать без доверенности. У него должна быть подтверждённая учётная запись физического лица. В нашем случае руководство банка уже было зарегистрировано на ГУ.
2. Регистрация компании на Госуслугах
Для этого нужна квалифицированная электронная подпись (КЭП), которую можно получить в одном из аккредитованных Минцифрой России удостоверяющих центров. С ее помощью юридическое лицо подписывает документы и подтверждает различные запросы на портале. Для того, чтобы работать с электронной подписью, необходимо установить криптозащиту на устройство. Это программное обеспечение может быть как платное, так и бесплатное. Подробнее — в инструкции или видео. В нашем случае банк был уже зарегистрирован на ГУ.
3. Регистрация информационной системы на технологическом портале Госуслуг
Доступ к порталу получают сотрудники организации, включенные в специальную группу “Технологический портал” и имеющие личную учетную запись на Госуслугах, это — обязательное условие для получения прав доступа к Техпорталу. После регистрации система заносится в реестр информационных систем (ИС) и получает мнемонику, то есть буквенно-цифровой код системы (к примеру, ROMASHKA, VECTOR, 123555_3S).
Существует небольшое Руководство пользователя технологического портала ЕСИА (47 страниц). В нем наглядно показано, как можно добавить новую ИС.
В нашем банке нашелся сотрудник, который уже имел доступ в портал, — он создал для нас новую ИС. Увы, этого было недостаточно. В руководстве написано: “создание записи ИС не означает, что данные ИС получают возможности по использованию программных интерфейсов ЕСИА. Для получения таких возможностей необходимо выполнить действия согласно Регламенту информационного взаимодействия Участников с Оператором ЕСИА и Оператором эксплуатации инфраструктуры электронного правительства”.
В разделе 1 “Введение” этого регламента приведена удобная таблица “Основные задачи заявителей”, где есть нужный нам пункт — “Подключиться к ЕСИА с целью идентификации и аутентификации пользователей своей системы (вход через Госуслуги)”. Там как раз описаны шаги, которые мы сейчас рассматриваем.
4. Получение сертификата и закрытого ключа для новой ИС
Сертификат должен удовлетворять следующим требованиям:
-
выдан аккредитованным Удостоверяющим центром. Благо в г. Екатеринбурге, где расположен главный офис УБРиР, есть два таких аккредитованных УЦ;
-
соответствует алгоритму формирования электронной подписи ГОСТ Р 34.10-2021 или алгоритму криптографического хэширования ГОСТ Р 34.11-2012;
-
должен содержать ОГРН юридического лица (ЮЛ), являющегося оператором ИС (может быть выпущен как на сотрудника ЮЛ, так и на организацию). Таким образом, в сертификате должна содержаться информация о том, что этот ключ относится именно к нашему банку.
При первичном получении сертификата нужно было посетить офис Контура (ООО Сертум-Про), при перевыпуске сертификата посещение не требуется — достаточно сформировать заявку в личном кабинете Контура. Далее там же выпускаются новые сертификат и ключ, которые записываются на виртуальную флешку (виртуальный образ с расширением .img).
Полученный сертификат — это файл с названием из 40 цифр, к примеру, 1151593111080991181175644517328337074622.cer. Этот сертификат нужно загрузить в карточку ИС на Техпортале.
Кстати, если открыть сертификат в текстовом редакторе, то там может оказаться абракадабра:
Это значит, что сертификат в бинарном формате. Если кликнуть по файлу сертификата в ОС Windows, появится диалоговое окно, в котором его можно преобразовать в другой формат — в X.509 (.CER) в кодировке Base-64:
Полученный файл сертификата можно открыть в текстовом редакторе и увидеть цифры и латинские буквы между “——BEGIN CERTIFICATE——” и “——END CERTIFICATE——”. Это значит, что сертификат в кодировке base64.
Закрытый ключ представляет собой папку с 6 файлами с расширением .key из контейнера КриптоПро:
-
header.key;
-
masks.key;
-
masks2.key;
-
name.key;
-
primary.key;
-
primary2.key.
Эти файлы понадобятся на сервере приложения при настройке интеграции с ЕСИА.
5. Подключение к тестовой среде ЕСИА
На этом этапе нужно отправить на адрес sd@sc.minsvyaz.ru заявку “Заявка на согласование права использования ЕСИА и на подключение ИС к <тестовой/промышленной> ЕСИА с целью использования программных интерфейсов ЕСИА для идентификации и аутентификации заявителей”.
Форма этой заявки приведена в Регламенте взаимодействия заявителей с операторами ЕСИА (Приложение Г). Вот как это выглядело у нас. Мы в Microsoft Word создали документ и заполнили его нужными данными.
В пункте “Планируемые к использованию программные интерфейсы” мы указали следующее:
-
да;
-
скоупы:
fullname, birthdate, birthplace, email, mobile, contacts, id_doc, snils, inn;
-
файл сертификата:
1151593111080991181175644517328337074622.cer.
Этот заполненный документ мы отправили на адрес sd@sc.minsvyaz.ru, не забыв прикрепить к сообщению файл сертификата нашей ИС.
Кстати, нас также интересовал другой вопрос: можно ли для тестовой среды использовать сертификат/ключ, который относится к промышленной среде? В октябре 2020 мы получили по email от Федерального ситуационного центра (sd@sc.minsvyaz.ru) такой ответ: “сертификат ИС может быть использован как для тестовой, так и для продуктивной среды”.
На форуме КриптоПро некоторые пользователи говорят, что неправильно использовать промышленный сертификат в тестовой среде. Тем не менее этот вариант допустим, поэтому мы им воспользовались, чтобы не тратить время.
6. Разработка или покупка сервиса интеграции с ЕСИА
Когда администраторы ГУ открывают доступ, компании нужно подключить свою систему к ЕСИА, чтобы она могла принимать и отправлять запросы. Минцифры не позволит подключиться к промышленной среде ЕСИА, если интеграция не будет работать в тестовой среде. В нашем случае мы решили не искать стороннее решение, а написать свой коннектор к ЕСИА на языке PHP.
7. Подключение к промышленной среде ЕСИА
Когда интеграция на тестовом стенде начинает работать, можно отправлять заявку на подключение ИС к промышленной среде. Форма заявки та же, что и в п.5, но только для промышленной среды.
Вот и все шаги, выполнив которые, мы смогли, наконец, порадоваться созданной интеграции с ЕСИА. Но не все так солнечно, поскольку технически непросто реализовать сервис авторизации в п.6. Об этом расскажем дальше.
Создаем свой сервис интеграции с ЕСИА
При создании собственного сервиса нам пришлось учитывать несколько ключевых моментов.
В OpenSSL нет поддержки ГОСТ
Алгоритм ГОСТ есть в библиотеке OpenSSL. Вернее, был. Начиная с версии OpenSSL 1.1.0 gost engine был удален из основного пакета, так как недостаточно активно поддерживался (см. CHANGES.md). Это значит, что по умолчанию шифрование алгоритмом ГОСТ в openssl не доступно. Тем не менее, работа над движком ГОСТ продолжается, но уже в рамках отдельного репозитория gost-engine/engine.
Подключаемся к проду по SSH и смотрим, поддерживает ли библиотека openssl шифрование ГОСТ:
openssl ciphers | grep GOST
Если эта команда ничего не вернет, значит, поддержки ГОСТ на сервере нет. У нас так и получилось.
Мы побоялись сломать прод из-за возможных сбоев при подключении gost engine к OpenSSL. Также выяснили, что другой проект в нашем банке хочет взаимодействовать с ЕСИА. Поэтому было решено создать отдельный сервис — esia-connector.
Задачи этого сервиса:
-
сгенерировать ссылку, перейдя по которой, пользователь окажется на сайте Госуслуг, где нужно авторизоваться и согласиться предоставить банку свои данные;
-
при помощи токена запросить данные пользователя в ГУ и сохранить их в базе данных сервиса;
-
предоставить другим сервисам Банка доступ к этим данным. Простое REST API, которое позволит другим внутренним сервисам получить доступ к данным клиента.
Генерация секретного .pem ключа из шести файлов КриптоПро
В УЦ мы уже получили сертификат и файлы секретного ключа для нашей ИС. Файлы секретного ключа из контейнера КриптоПро представляют собой папку, в которой расположены 6 файлов с расширением .key:
-
header.key;
-
masks.key;
-
masks2.key;
-
name.key;
-
primary.key;
-
primary2.key.
Нам нужно получить из них один файл в формате .pem. Для этого мы проделали серию шагов:
-
скачали и распаковали .zip-файл проекта https://github.com/garex/nodejs-gost-crypto;
-
создали в корне этого проекта (где файл package.json) папку «keys» и поместили туда шесть файлов от КриптоПро с расширением .key;
-
открыли консоль и перешли в корень этого проекта;
-
убедились, что у нас на ПК установлен Node.js:
node -v; -
установили зависимости:
npm install; -
запустили команду на экспорт приватного ключа:
node bin/export-cryptopro-key.js -c ./keys > private-key.pem.
В итоге у нас появился файл private-key.pem. На удивление, объем его крайне мал — всего 4 строчки, например:
—----BEGIN PRIVATE KEY—----
MEgCAQFwHwYIkoUDBwEBAQwEwYHKoUDAgIkAAYIkAAYIKoUDBwEBAgIEIgQgtWkIBZW5
mUvc6UE12SuwcdsTcXXD6hqcXZPYmNcdusE=
—----END PRIVATE KEY—----
Несмотря на свой небольшой размер, он помог нам установить связь с ЕСИА.
Генерация ссылки для авторизации на портале ЕСИА
Нам нужно было как-то сгенерировать ссылку, перейдя по которой, пользователь окажется на сайте Госуслуг. Может быть, так?
<a href="https://esia.gosuslugi.ru">Авторизоваться через Госуслуги</a>
Если бы все было так просто. Вы можете перейти по этой ссылке, авторизоваться, но волшебства не случится, ведь мы не сообщаем ЕСИА, что у клиента нужно спросить разрешения поделиться своими данными с банком.
На самом деле, генерация этой ссылки — непростая задача. Лучше ее поручить сторонней библиотеке: https://github.com/fr05t1k/esia. Она поддерживает PHP 8.
Но и тут снова никаких чудес не произошло — эта библиотека просто так работать не будет. Нам нужно создать окружение, где есть openssl с поддержкой ГОСТ, а также php-fpm, nginx.
Создаем окружение при помощи Docker
Нам помог проект https://github.com/rnixik/docker-openssl-gost. Однако на момент написания этой статьи он использовал устаревшие версии библиотек. Поэтому нам пришлось самостоятельно решать, как добавить к свежей версии PHP поддержку ГОСТ. Это было непросто, но после пары недель изысканий нам это удалось.
Решение на удивление оказалось простым:
-
берем актуальный docker-образ PHP, к примеру php:8-fpm-bullseye;
-
на основе этого образа в Dockerfile делаем сборку gost-engine из ветки openssl_1_1_1;
-
редактируем конфиг OpenSSL, чтобы подключить gost-engine.
Проект для демонстрации интеграции с ЕСИА
Лучше один раз попробовать, чем сто раз услышать или увидеть. Мы создали тестовый проект https://github.com/yesnik/esia-mini.
Установив его, вы сами сможете подключиться к тестовому стенду ЕСИА, загрузить оттуда данные тестовой учетной записи и на практике понять, как это все работает.
Как видите, очень даже возможно добавить поддержку ГОСТ к свежему образу PHP и настроить связь с Госуслугами.
А как же КриптоПро?
Оказывается, что для связи с ЕСИА необходимо использовать сертифицированный криптопровайдер. Безопасность должна быть безопасной. Одним из таких решений является КриптоПро. Для реализации интеграции с ГУ на проде нам пришлось его приобрести. У этого решения есть свои особенности подключения к PHP, но это тема отдельной статьи. А так, для тренировки общения с тестовым стендом ЕСИА вполне подойдет наш проект.
Список источников
-
Как работает идентификация пользователей через «Госуслуги»
-
Список аккредитованных удостоверяющих центров
-
OpenSSL и ГОСТ
Документы
-
Методические рекомендации по использованию ЕСИА
-
Руководство пользователя технологического портала ЕСИА
-
Регламент информационного взаимодействия Участников с Оператором ЕСИА и Оператором эксплуатации инфраструктуры электронного правительства