Конфигурирование 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)” соответствует набору данных, получаемых по scope fullname и id_doc.

    Соответствие между разрешениями (scope) и наборами данных#

    Набор данных

    Обозначение набора

    Разрешения

    Паспортные данные

    documents.elements-1

    id_doc

    Контакты (адрес электронной почты и номер мобильного телефона)

    contacts.elements-1

    email, mobile

    Адреса (адрес проживания и регистрации)

    addresses.elements-1

    addresses

Пример блока 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_org

  • requested_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-сертификатом ЕСИА нужно выполнить следующие действия:

  1. Взять новый SSL-сертификат нужной среды ЕСИА (экспортировать, например, в new_test_esia.crt);

  2. Положить этот сертификат в директорию /conf/crt/ на сервере ESIA-Bridge.

  3. Прописать путь к новому сертификату в блоке 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"}
    ]
  }
}
  1. Перезапустить 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. ЕСИА возвращает пользователя в 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#

  1. Установить на ПК криптопровайдер КриптоПро CSP (версия 4.0 и выше) и установить данный ключ в реестр Windows. Для этого выполнить шаги:

    • запустить КриптоПро CSP;

    • выбрать вкладку Сервис и нажать на кнопку Посмотреть сертификаты в контейнере:

      screenshot

    • нажать на кнопку Обзор:

      image1

    • выбрать контейнер с ключом ГОСТ Р 34.10-2012:

      image2

    • в открывшемся окне убедиться, что выбран нужный ключевой контейнер и нажать далее:

      image3

    • в окне со свойствами сертификата нажать на кнопку Установить:

      image4

    • сообщение Сертификат был установлен в хранилище “Личные” текущего пользователя свидетельствует об успешном сохранении.

  2. Экспортировать ключ КриптоПро из хранилища Windows в PKCS12. Для этого приобрести и запустить утилиту P12FromGostCSP. После запуска утилиты выполнить шаги:

    • выбрать сертификат:

      image5

    • задать пароль от создаваемого контейнера PKCS12:

      image6

    • указать файл для сохранения PKCS12, в качестве расширения обязательно указав .pfx.

      image7

  3. Сделать резервную копию файла с хранилищем ключей esia-bridge.bks.

  4. Установить окружение Java версии 8.

  5. Импортировать ключ из 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 – путь к файлу BKS esia-bridge.bks;

    • --deststoretype - тип хранилища. Нужно указать значение 'BKS';

    • --deststorepass - пароль к хранилищу BKS;

    • --destalias - имя (alias) ключа в BKS, например, gost2012;

    • --destkeypass - пароль к ключу в BKS. Нужно указать то же самое значение, что и для параметра --deststorepass.

  6. Загрузить получившийся esia-bridge.bks на сервер ESIA-Bridge.

  7. Отредактировать конфигурационный файл /etc/esia-bridge/esia-bridge.conf, прописав в параметре alias в разделе oauth\client\secret имя (alias) ключа ГОСТ Р 34.10-2012.

  8. Отредактировать конфигурационный файл /etc/esia-bridge/passwords, прописав в параметре oauth.client.secret.key_password пароль от ключа.

  9. Перезапустить 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).

  1. Установите зависимости. Это нужно сделать только один раз, последующие конвертации можно выполнять на данном сервере без дополнительных изменений:

    1. Установите asn1:

      pip3 install asn1
      
    2. Установите 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
      
    3. Установите 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
      
  2. Загрузите утилиту 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
    
  3. Экспортируйте ключ из pfx с ключом ГОСТ (в данном запросе - sourcekey.pfx):

    python cpfx.py sourcekey.pfx
    

    Ответ будет содержать информацию о том, в какой pem-контейнер был сохранен ключ. Например, exported_4192476d-3e66-4963-8684-bd95d6be7967.pem.

  4. Конвертируйте сертификат ключа из формата DER в PEM.

    openssl x509 -in sourcecrt.cer -inform der -out sourcecrt.pem
    
  5. Соберите новый pfx из ключа и сертификата:

    openssl pkcs12 -export -in sourcecrt.pem -inkey 4192476d-3e66-4963-8684-bd95d6be7967.pem -out correct.pfx -name gost2012
    
  6. Импортируйте 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.

  7. Загрузите получившийся esia-bridge.bks на сервер ESIA-Bridge.

  8. Отредактируйте конфигурационный файл /etc/esia-bridge/esia-bridge.conf, прописав в параметре alias в разделе oauth\client\secret имя (alias) ключа ГОСТ Р 34.10-2012.

  9. Отредактируйте конфигурационный файл /etc/esia-bridge/passwords, прописав в параметре oauth.client.secret.key_password пароль от ключа.

  10. Перезапустите 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