Конфигурирование ESIA-Bridge#
Параметры конфигурации#
Конфигурирование ESIA-Bridge осуществляется посредством редактирования файла ESIA-Bridge.conf, который хранится в директории /etc/esia-bridge или esia-bridge\conf (версия для Windows). Для работы ESIA-Bridge должны быть определены следующие параметры конфигурационного файла:
Общие настройки ESIA-Bridge
domain– публичный домен, на который установлен ESIA-Bridge, например,esia.client.testcase.ru. Этот домен должен быть доступен из сети Интернет;session.ttl.sec- время жизни сессионной cookie (tokenSCS), используемой для получения данных пользователя при работе в онлайн-режиме. Задается в секундах;esia.host- домен среды ЕСИА. По умолчанию указана тестовая среда ЕСИА. Возможные значения:Тестовая среда ЕСИА:
esia-portal1.test.gosuslugi.ruПродуктивная среда ЕСИА:
esia.gosuslugi.ru
Настройки электронной подписи ИС, используемой для взаимодействия с ЕСИА
Примечание
Рекомендации по генерации BKS хранилища и экспорту сертификата из хранилища приведены далее.
type– тип используемого хранилища электронной подписи, например, “BKS” (BouncyCastle format, по умолчанию);path– путь к сертификату и приватному ключу, например,${app.home}/conf/esia-bridge.bks;password.alias– алиас с файлом паролей для указания пароля к хранилищу электронной подписи, например,app.keystore.password;
Настройки взаимодействия с сервисом ЕСИА по получению данных пользователя
endpoint– URL REST-сервиса ЕСИА;embed– объем получаемых данных из ЕСИА (опциональный параметр). Если параметр не указан, то ESIA-Bridge получает полный набор данных о пользователе, что соответствует значению(documents.elements-1,contacts.elements-1,addresses.elements-1)параметра. При необходимости получать сокращенный набор данных следует перечислить только те элементы, которые могут быть получены. Например, значение параметраembed=“(documents.elements-1)”соответствует набору данных, получаемых по scopefullnameиid_doc.Соответствие между разрешениями (scope) и наборами данных# Набор данных
Обозначение набора
Разрешения
Паспортные данные
documents.elements-1id_docКонтакты (адрес электронной почты и номер мобильного телефона)
contacts.elements-1email,mobileАдреса (адрес проживания и регистрации)
addresses.elements-1addresses
Пример блока rest:
rest {
esia {
endpoint="https://"${app.esia.host}"/rs"
request.timeout.msec=10000
}
embed="(documents.elements-1)"
}
Настройки ИС, которые будут запрашивать аутентификацию в ЕСИА
Должно быть указано по крайней мере одно значение clients – указывается доменное имя клиента и лицензия, полученная на это доменное имя, например:
“[{host="user.testcase.ru",licenseKey="user.testcase.ru|lUgWvhJqYa/L8PdzLZReX/4kly3f9Sd4on2EHrXTRstDQPB3nWRczgvjZ70rbpk5UhwOReAlUkGckr+oAQjqdA== "}]”
Важно
Доменное имя клиента должно быть уровнем не ниже, чем это указано в лицензии.
Примечание
Может быть указано несколько клиентов ESIA-Bridge, каждому из которых должна соответствовать лицензия.
Настройки взаимодействия с сервисом авторизации ЕСИА
endpoint.authorization– URL сервиса авторизации ЕСИА;endpoint.token– URL сервиса получения маркера (токена) доступа ЕСИА;id– мнемоника ИС, от имени которой ESIA-Bridge будет взаимодействовать с ЕСИА, например,TEST_INT_SYS;name– имя ИС, от имени которой ESIA-Bridge будет взаимодействовать с ЕСИА;alias- используемый ключ электронной подписи, например,esia-bridge-rsa;key_password.alias– алиас с файлом паролей для указания пароля к приватному ключу электронной подписи, например,oauth.client.secret.key_password;requested_scopes– перечень запрашиваемых разрешений (scope) о пользователе. Указываются через пробел, напримерopenid fullname birthdate gender contacts id_doc inn snils.Примечание
Система может запрашивать только те разрешения, к которым ей предоставлен доступ.
Перечень наиболее часто используемых разрешений# Название разрешения
Обозначение разрешения
Разрешение, позволяющее проводить идентификацию и аутентификацию пользователей
openidПросмотр фамилии, имени и отчества
fullnameПросмотр даты рождения
birthdateПросмотр пола
genderПросмотр СНИЛС
snilsПросмотр ИНН
innПросмотр данных о документе, удостоверяющем личность
id_docПросмотр места рождения
birthplaceПросмотр адреса электронной почты
emailПросмотр номера мобильного телефона
mobileПросмотр данных о контактах и адресах
contactsПросмотр списка организаций пользователя
usr_orgrequested_org_scopes– перечень запрашиваемых разрешений (scope) об организации. Указывается только в том случае, если система имеет право получать данные об организации. Перечень разрешений вводится через пробел, например:http://esia.gosuslugi.ru/org_emps?org_oid=$oid http://esia.gosuslugi.ru/org_fullname?org_oid=$oid, где$oid– выражение, указывающее на то, что это параметризуемое разрешение. Возможно указание разрешений, предусмотренных Методическими рекомендациями по использованию ЕСИА.reg– раздел, используемый для конфигурирования сервиса импорта учетных записей. Добавляется только при использовании этого сервиса. Включает в себя параметры:requested_scope– запрашиваемый системой scope для операции импорта (по умолчанию –ext_imp);licenseKey– лицензия, позволяющая системе вызывать сервис регистрации.
Настройки логов
conf-url – файл, в который будут записываться логи (можно оставить значение по умолчанию – ${app.home}/conf/ESIA-Bridge-logger.xml).
Настройки доверенных ssl-сертификатов
stores – перечень сертификатов, которые считаются доверенными при ssl-взаимодействии. При необходимости добавить возможность работы с новым ssl-сертификатом ЕСИА нужно выполнить следующие действия:
Взять новый SSL-сертификат нужной среды ЕСИА (экспортировать, например, в
new_test_esia.crt);Положить этот сертификат в директорию
/conf/crt/на сервере ESIA-Bridge.Прописать путь к новому сертификату в блоке
stores:
ws.ssl { trustManager = { stores = [ {type = "PEM", path = ${app.home}"/conf/crt/wide_gosuslugi_ru.crt"}, {type = "PEM", path = ${app.home}"/conf/crt/new_test_esia.crt"}, #Строчка с новым сертификатом {type = "PEM", path = ${app.home}"/conf/crt/test_gosuslugi_ru.crt"}, {type = "PEM", path = ${app.home}"/conf/crt/DSTRootCAX3.crt"}, {type = "PEM", path = ${app.home}"/conf/crt/LetsEncryptAuthorityX3.crt"} ] } }
Перезапустить ESIA-Bridge.
Также можно отключить проверку SSL. Для этого в ws.ssl добавить параметр acceptAnyCertificate = true и закомментировать trustManager следующим образом:
ws.ssl {
loose = {
acceptAnyCertificate = true
},
_trustManager = {
stores = [
{type = "PEM", path = ${app.home}"/conf/crt/wide_gosuslugi_ru.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/test_gosuslugi_ru.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/DSTRootCAX3.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/LetsEncryptAuthorityX3.crt"}
]
}
}
После этого перезапустить ESIA-Bridge.
Настройки, необходимые для внутренних процессов
application.secret– секретный ключ приложения;cookieDomain– домен, на который должна быть установлена cookie, он должен быть общим и для ESIA-Bridge, и для клиента, например,testcase.ru;encodingKey– секретный ключ, используемый для шифрования cookie;hmacKey– ключ хэш-кода проверки подлинности сообщения.
Параметры application.secret, encodingKey, hmacKey генерируются в процессе установки. Они должны быть изменены только при использовании нескольких установок ESIA-Bridge для работы с одним клиентом, в этом случае эти ключи должны совпадать во всех установках.
Внимание
Перед запуском в своей среде проверьте, что указаны новые значения как минимум следующих параметров конфигурационного файла:
domain– домен, на который установлен ESIA-Bridge;esia.host– домен среды ЕСИА;path– путь к сертификату и приватному ключу электронной подписи системы;clients- лицензия на используемый домен;id- мнемоника вызывающей системы;name- имя вызывающей системы;cookieDomain- домен, на который будет устанавливаться сессионная cookie.
Пример файла с настройками:
app {
home=${blitzHome}
domain="esia.client.testcase.ru"
session.ttl.sec=300
# esia.host="demo1-esia.reaxoft.ru"
# esia.host="esia.gosuslugi.ru" # production ESIA
esia.host="esia-portal1.test.gosuslugi.ru" # pre-production test ESIA
keystore {
type="BKS"
path=${app.home}/conf/esia-bridge.bks
password.alias = "app.keystore.password"
}
rest {
esia {
endpoint="https://"${app.esia.host}"/rs"
request.timeout.msec=10000
}
embed="(documents.elements-1)"
}
clients=[{host="user.testcase.ru",licenseKey="user.testcase.ru|lUgWvhJqYa/L8PdzLZReX/4kly3f9Sd4on2EHrXTRstDQPB3nWRczgvjZ70rbpk5UhwOReAlUkGckr+oAQjqdA=="}]
}
oauth {
authorization_server {
endpoint.authorization="https://"${app.esia.host}"/aas/oauth2/ac"
endpoint.token="https://"${app.esia.host}"/aas/oauth2/te"
}
client {
id="TEST_INT_SYS"
name="Test system"
secret {
alias="esia-bridge-rsa"
key_password.alias = "oauth.client.secret.key_password"
}
callback_uri = "https://"${app.domain}""${?https.port}${app.path}"/cb"
offline_callback_uri = "http://"${app.domain}${app.path}"/offlineCb"
requested_scopes = "openid fullname id_doc"
}
}
logger {
conf-url="file:"${app.home}"/conf/esia-bridge-logger.xml"
dir=${app.home}"/logs"
}
play {
# If you deploy your application to several instances be sure to use the same key!
application.secret="Z,)CF}r[bolvS6Pmbq54ahT#^JgwtAt4KkR4OQs7m.OH2A6Tg1ho?;gJV!oop"
ws.ssl {
trustManager = {
stores = [
{type = "PEM", path = ${app.home}"/conf/crt/wide_gosuslugi_ru.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/test_gosuslugi_ru.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/COMODORSAOrganizationValidationSecureServerCA.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/DSTRootCAX3.crt"},
{type = "PEM", path = ${app.home}"/conf/crt/LetsEncryptAuthorityX3.crt"}
]
}
}
}
scs {
cookieName="tokenSCS"
cookieDomain=".testcase.ru"
cookiePath="/"
crypto {
# If you deploy your application to several instances be sure to use the same key!
encodingKey=20f4456ddfEECE63cDeac6abb879AF9A
# If you deploy your application to several instances be sure to use the same key!
hmacKey=CdCfC45f28cF3Ec1EB5a1aFA7Bbd0b4F5b87fd5A
}
}
Необходимо использовать ESIA-Bridge через SSL, причем SSL должен терминироваться на балансировщике. Сервис запускается по порту 9000. Соответственно, балансировщик на периметре должен терминировать https и перенаправлять полученный http на порт 9000 вместо порта 80. Рекомендуется сделать публичным только URL для аутентификации /blitz/bridge/entrance. URL получения данных /blitz/bridge/user должен быть доступен только при обращении с сервера и не быть доступным из сети Интернет. ЕСИА возвращает пользователя в ESIA-Bridge с SSL. Чтобы не было ошибки, в блоке oauth конфигурационного файла необходимо изменить параметр callback_uri на следующий:
callback_uri = "https://"${app.domain}${app.path}"/cb"
В результате блок oauth должен иметь приблизительно следующий вид:
oauth {
authorization_server {
endpoint.authorization="https://"${app.esia.host}"/aas/oauth2/ac"
endpoint.token="https://"${app.esia.host}"/aas/oauth2/te"
}
client {
id = "TEST_SYSTEM"
name = "TEST AS"
callback_uri = "https://"${app.domain}${app.path}"/cb"
secret {
alias = "jwtRSA"
}
}
Ключи ГОСТ Р 34.10-2012#
С 8 октября 2019 г. подключаемые к ЕСИА системы должны использовать сертификаты электронных подписей на основе ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012.
Для работы с ключами ГОСТ Р 34.10-2012 необходимо использовать ESIA-Bridge версии не ниже 1.19. Если установлена более ранняя версия, то обновить ESIA-Bridge.
Для настройки работы ESIA-Bridge с ключом ГОСТ Р 34.10-2012 необходимо получить для вашей организации в аккредитованном удостоверяющем центре ключевой контейнер средства квалифицированной электронной подписи в формате КриптоПро. Далее его необходимо его импортировать в хранилище ключей esia-bridge.bks, используемое ESIA-Bridge. Для этого можно обратиться к нашим экспертам в рамках договора техподдержки на ESIA-Bridge или выполнить один из описанных ниже способов конвертации.
Конвертация ключа через P12FromGostCSP#
Установить на ПК криптопровайдер КриптоПро CSP (версия 4.0 и выше) и установить данный ключ в реестр Windows. Для этого выполнить шаги:
запустить КриптоПро CSP;
выбрать вкладку Сервис и нажать на кнопку Посмотреть сертификаты в контейнере:
нажать на кнопку Обзор:
выбрать контейнер с ключом ГОСТ Р 34.10-2012:
в открывшемся окне убедиться, что выбран нужный ключевой контейнер и нажать далее:
в окне со свойствами сертификата нажать на кнопку Установить:
сообщение Сертификат был установлен в хранилище “Личные” текущего пользователя свидетельствует об успешном сохранении.
Экспортировать ключ КриптоПро из хранилища Windows в PKCS12. Для этого приобрести и запустить утилиту P12FromGostCSP. После запуска утилиты выполнить шаги:
Сделать резервную копию файла с хранилищем ключей
esia-bridge.bks.Установить окружение Java версии 8.
Импортировать ключ из PKCS12 в BKS-хранилище с помощью бесплатной утилиты gost-keytool (загрузить zip-архив).
Пример вызова операции импорта ключа из PKCS12 в BKS (Linux):
java -cp gost-keytool.jar:bcprov-jdk15on-1.70.jar ru.reaxoft.gost.Keytool import_pkcs12 --srckeystore file.pfx --srcstorepass 1 --srcalias csp_exported --srckeypass 1 --destkeystore esia-bridge.bks --deststoretype BKS --deststorepass 2 --destalias gost2012 --destkeypass 2
Пример вызова операции импорта ключа из PKCS12 в BKS (Windows):
java -cp "gost-keytool.jar;bcprov-jdk15on-1.70.jar" ru.reaxoft.gost.Keytool import_pkcs12 --srckeystore file.pfx --srcstorepass 1 --srcalias csp_exported --srckeypass 1 --destkeystore esia-bridge.bks --deststoretype BKS --deststorepass 2 --destalias gost2012 --destkeypass 2
В этой операции используются параметры:
--srckeystore- путь к файлу PKCS12;--srcstorepass- пароль от контейнера PKCS12 (был задан на шаге 2);--srcalias- имя ключа в контейнере PKCS12. Нужно указать значение'csp_exported';--srckeypass- пароль к ключу в контейнере PKCS12. Нужно указать то же самое значение, что и для параметра--srcstorepass;--destkeystore– путь к файлу BKSesia-bridge.bks;--deststoretype- тип хранилища. Нужно указать значение'BKS';--deststorepass- пароль к хранилищу BKS;--destalias- имя (alias) ключа в BKS, например,gost2012;--destkeypass- пароль к ключу в BKS. Нужно указать то же самое значение, что и для параметра--deststorepass.
Загрузить получившийся
esia-bridge.bksна сервер ESIA-Bridge.Отредактировать конфигурационный файл
/etc/esia-bridge/esia-bridge.conf, прописав в параметреaliasв разделеoauth\client\secretимя (alias) ключа ГОСТ Р 34.10-2012.Отредактировать конфигурационный файл
/etc/esia-bridge/passwords, прописав в параметреoauth.client.secret.key_passwordпароль от ключа.Перезапустить ESIA-Bridge.
Конвертация через CryptoPro PFX Decoder by li0ard#
Примечание
Утилита CryptoPro PFX Decoder by li0ard бесплатна.
Внимание
Для выполнения дальнейших шагов нужно иметь pfx-файл с ключом (sourcekey.pfx) и сертификат этого ключа (sourcecrt.cer). Все действия проводятся в redos 7.3 c включенной настройкой для использования ГОСТ в OpenSSL. Для включения настройки, выполните команду:
openssl-switch-config gost
Можно также использовать Alt Linux или Astra Linux.
Важно
Для корректной работы на сервере должен быть предварительно установлен Python (python3-pip).
Установите зависимости. Это нужно сделать только один раз, последующие конвертации можно выполнять на данном сервере без дополнительных изменений:
Установите
asn1:pip3 install asn1
Установите
pyderasn:[fetch|wget] http://www.pyderasn.cypherpunks.ru/download/pyderasn-9.3.tar.zst [fetch|wget] http://www.pyderasn.cypherpunks.ru/download/pyderasn-9.3.tar.zst.asc gpg --verify pyderasn-9.3.tar.zst.asc pyderasn-9.3.tar.zst zstd -d < pyderasn-9.3.tar.zst | tar xf - cd pyderasn-9.3 python setup.py install
Установите
pygost:[fetch|wget] http://www.pygost.cypherpunks.ru/pygost-5.12.tar.zst [fetch|wget] http://www.pygost.cypherpunks.ru/pygost-5.12.tar.zst.asc gpg --verify pygost-5.12.tar.zst.asc pygost-5.12.tar.zst zstd -d < pygost-5.12.tar.zst | tar xf - cd pygost-5.12 python setup.py install
Загрузите утилиту CryptoPro PFX Decoder by li0ard:
[fetch|wget] https://raw.githubusercontent.com/li0ard/cpfx/pyderasn/cpfx.py [fetch|wget] https://raw.githubusercontent.com/li0ard/cpfx/pyderasn/schemas.py
Экспортируйте ключ из
pfxс ключом ГОСТ (в данном запросе -sourcekey.pfx):python cpfx.py sourcekey.pfx
Ответ будет содержать информацию о том, в какой pem-контейнер был сохранен ключ. Например,
exported_4192476d-3e66-4963-8684-bd95d6be7967.pem.Конвертируйте сертификат ключа из формата
DERвPEM.openssl x509 -in sourcecrt.cer -inform der -out sourcecrt.pem
Соберите новый
pfxиз ключа и сертификата:openssl pkcs12 -export -in sourcecrt.pem -inkey 4192476d-3e66-4963-8684-bd95d6be7967.pem -out correct.pfx -name gost2012
Импортируйте PKCS12 в BKS-формат для ESIA-Bridge. Для корректного импорта необходимо использовать актуальную версию bcprov-jdk15on и утилиту
gost-keytool(загрузить zip-архив).java -cp gost-keytool.jar:bcprov-jdk15on-1.70.jar ru.reaxoft.gost.Keytool import_pkcs12 --srckeystore correct.pfx --srcstorepass 1234 --srckeypass 1234 --destkeystore esia-bridge.bks --deststoretype BKS --deststorepass pass --destalias gost2012 --destkeypass pass --srcalias gost2012
В этом запросе:
--srckeystore- путь к сконвертированному файлуpfx(PKCS12);--srcstorepass- пароль от контейнера;--srcalias- имя ключа в контейнереpfx. Нужно указать значение'gost2012';--srckeypass- пароль к ключу в контейнере pfx. Нужно указать то же самое значение, что и для параметра--srcstorepass;--destkeystore– путь к файлу BKS esia-bridge.bks;--deststoretype- тип хранилища. Нужно указать значение „BKS“;--deststorepass- пароль к хранилищу BKS;--destalias- имя (alias) ключа в BKS, например,gost2012;--destkeypass- пароль к ключу в BKS. Нужно указать то же самое значение, что и для параметра--deststorepass.
Загрузите получившийся
esia-bridge.bksна сервер ESIA-Bridge.Отредактируйте конфигурационный файл
/etc/esia-bridge/esia-bridge.conf, прописав в параметреaliasв разделеoauth\client\secretимя (alias) ключа ГОСТ Р 34.10-2012.Отредактируйте конфигурационный файл
/etc/esia-bridge/passwords, прописав в параметреoauth.client.secret.key_passwordпароль от ключа.Перезапустите ESIA-Bridge.
Запись событий аутентификации в журнал#
При необходимости ESIA-Bridge может осуществлять запись событий входа в
журнал. Для этого в файле настройки логов, указанном в параметре
conf-url (по умолчанию - esia-bridge-logger.xml), нужно найти и при
необходимости отредактировать разделы:
appender name="authentication"- отвечает за события аутентификации пользователей (результат обращения на/blitz/bridge/entrance);appender name="user_data"- отвечает за события получения данных пользователя (результат обращения на/blitz/bridge/user);appender name="org_data"- отвечает за события получения данных организации (результат обращения на/blitz/bridge/organization).
Подраздел - pattern содержит шаблон записи события в лог. Доступны
следующие параметры для событий аутентификации и получения данных
пользователя:
ip- ip-адрес;authn.subjectId- идентификатор пользователя;authn.method- метод аутентификации (только для событий аутентификации);authn.sessionId- идентификатор сессии (только для событий аутентификации);person.oid- внутренний идентификатор пользователя;person.lastName- фамилия;person.firstName- имя;person.middleName- отчество;person.trusted- признак подтвержденности пользователя;person.mobile.value- номер мобильного телефона;person.mobile.status- признак подтвержденности мобильного телефона;person.email.value- адрес электронной почты;person.email.status- признак подтвержденности адреса электронной почты;person.birthDate- дата рождения;person.birthPlace- место рождения;person.citizenship- гражданство;person.gender- пол;person.inn- ИНН;person.snils- СНИЛС;person.passport.status- признак подтвержденности паспорта;person.passport.issueDate- дата выдачи паспорта;person.passport.issuedBy- кем выдан;person.passport.issuerId- код подразделения;person.passport.number- номер паспорта;person.passport.series- серия паспорта.
Для событий получения данных организации доступны следующие параметры:
ip- ip-адрес;org.oid- внутренний идентификатор организации;org.ogrn- ОГРН организации;org.type- тип организации;org.inn- ИНН организации.
Пример содержания раздела pattern:
%date %X{ip} %X{person.oid} %X{person.lastName} %X{person.firstName} %X{person.middleName} %X{person.trusted} %X{person.mobile.value} %X{person.mobile.status} %X{person.email.value} %X{person.email.status} %X{authn.subjectId} %X{authn.method} %X{authn.sessionId} %message%n
Пример содержания раздела pattern для сохранения события получения
данных организации:
%date %X{ip} %X{org.oid} %X{org.ogrn} %X{org.type} %X{org.inn} %message%n







