ЕСИА#

Контейнер ключей для ЕСИА и Цифрового профиля#

Запросы на аутентификацию через внешний поставщики идентификации ЕСИА и ЦП ЕСИА должны быть подписаны электронной подписью с использованием контейнера ключей с алгоритмами ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012. Для использования в Blitz Identity Provider необходим файловый контейнер ключа электронной подписи в одном из следующих форматов:

  • КриптоПро CSP (версия 4.0 или выше),

  • КриптоПро JCP 2.0.

Для получения контейнера ключей необходимо обратиться в аккредитованный удостоверяющий центр.

Внимание

В случае если контейнер ключей выпускается удостоверяющим центром на физический носитель, то важно указать, что контейнер ключей должен быть выпущен с экспортируемым закрытым ключом, чтобы его можно было использовать в Blitz Identity Provider.

После получения в аккредитованном удостоверяющем центре контейнера ключей его необходимо импортировать в хранилище ключей, используемое Blitz Identity Provider. Для этого можно или обратиться в техническую поддержку Blitz Identity Provider или воспользоваться одним из описанных далее в подразделах способов конвертации.

КриптоПро CSP на Windows#

Для конвертации контейнера КриптоПро CSP в Windows понадобятся:

  • ПК под управлением Windows с настроенным браузером Internet Explorer 11.

  • Платная утилита P12FromGostCSP.

  • Установленный на ПК криптопровайдер КриптоПро CSP (версия 4.0 и новее).

Инструкция по конвертации контейнера:

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

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

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

      Просмотр сертификатов в контейнере ключей
    • нажать на кнопку Обзор:

      Просмотр сертификатов в контейнере ключей (продолжение)
    • выбрать контейнер с ключом ГОСТ Р 34.10-2012:

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

      Проверка выбранного контейнера ключа
    • в окне со свойствами сертификата нажать на кнопку Установить:

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

  2. Экспортировать ключ КриптоПро из хранилища Windows в PKCS#12. Для этого приобрести и запустить утилиту P12FromGostCSP. Нужна специальная версия утилиты – рекомендуется проконсультироваться с технической поддержкой Blitz Identity Provider.

    После запуска утилиты выполнить шаги:

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

      Выбор сертификата
    • задать пароль от создаваемого контейнера PKCS#12:

      Задание пароля от контейнера PKCS12
    • указать файл для сохранения PKCS#12. В качестве расширения обязательно указать .pfx:

      Сохранение файла с контейнером PKCS#12
  3. Установить на ПК окружение Java (JRE) версии 8.

  4. Импортировать ключ из PKCS#12 в BKS-хранилище с помощью бесплатной утилиты gost-keytool и актуальной версии библиотеки bcprov-jdk15on.

    java -cp "gost-keytool.jar;bcprov-jdk15on-1.70.jar" ru.reaxoft.gost.Keytool import_pkcs12 --srckeystore gost.pfx --srcstorepass 12345678 --srcalias csp_exported --srckeypass 12345678 --destkeystore blitz-keystore.bks --deststoretype BKS --deststorepass pass --destalias gost2012 --destkeypass pass
    

    В этой операции используются параметры:

    • srckeystore – путь к файлу PKCS#12;

    • srcstorepass – пароль от контейнера PKCS#12 (был задан на шаге 2);

    • srcalias – имя ключа в контейнере PKCS#12. Нужно указать значение csp_exported;

    • srckeypass – пароль к ключу в контейнере PKCS#12. Нужно указать то же самое значение, что и для параметра srcstorepass;

    • destkeystore – путь к файлу BKS blitz-keystore.bks, взятому с сервера Blitz Identity Provider;

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

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

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

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

  5. Заменить файл blitz-keystore.bks на сервере Blitz Identity Provider;

  6. Перезапустить приложения Blitz Identity Provider.

КриптоПро CSP на Linux#

Для конвертации контейнера КриптоПро CSP в Linux понадобятся:

  • ПК или сервер под управлением одного из следующих Linux: Astra Linux 1.7, РЕД ОС 7.3, Альт. В случае использование сервера рекомендуется использовать иной сервер, чем те, на которых развернут Blitz Identity Provider.

  • Бесплатная утилита CryptoPro PFX Decoder by li0ard.

Важно

Перед началом конвертации нужно сохранить контейнер ключей КриптоПро CSP в формат pfx (файл sourcekey.pfx) и сертификат открытого ключа в формат cer (sourcecrt.cer).

Инструкция по конвертации контейнера:

  1. Переключить ОС на использование ГОСТ в библиотеке OpenSSL согласно инструкции для используемой ОС: Astra Linux, РЕД ОС 7.3, Альт. Инструкция далее приводится на примере РЕД ОС 7.3 с включенной настройкой для использования ГОСТ в OpenSSL.

  2. Включить настройку ГОСТ в OpenSSL:

    openssl-switch-config gost
    
  3. Настроить зависимости (делается однократно перед первой конвертацией ключа на сервере):

    Установка модуля asn1:

    pip3 install asn1
    

    Установка модуля pyderasn:

    [fetch|wget] http://www.pyderasn.cypherpunks.su/download/pyderasn-9.3.tar.zst
    [fetch|wget] http://www.pyderasn.cypherpunks.su/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
    
  4. Загрузить утилиту 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
    
  5. Конвертировать контейнер ключа из формата pfx в формат PEM с помощью CryptoPro PFX Decoder by li0ard:

    python cpfx.py sourcekey.pfx
    

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

  6. Конвертировать сертификат открытого ключа из формата DER в формат PEM c помощью OpenSSL:

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

    openssl pkcs12 -export -in sourcecrt.pem -inkey 4192476d-3e66-4963-8684-bd95d6be7967.pem -out correct.pfx -name gost2012
    
  8. Установить окружение Java (JRE) версии 8.

  9. Импортировать ключ из PKCS#12 в BKS-хранилище с помощью бесплатной утилиты gost-keytool и актуальной версии библиотеки bcprov-jdk15on.

    java -cp gost-keytool.jar:bcprov-jdk15on-1.70.jar ru.reaxoft.gost.Keytool import_pkcs12 --srckeystore correct.pfx --srcstorepass 1234 --srckeypass 1234 --destkeystore blitz-keystore.bks --deststoretype BKS --deststorepass pass --destalias gost2012 --destkeypass pass --srcalias gost2012
    

    В этой операции используются параметры:

    • srckeystore – путь к сконвертированному pfx-контейнеру (PKCS#12);

    • srcstorepass – пароль от контейнера PKCS#12;

    • srcalias – имя ключа в контейнере PKCS#12. Нужно указать значение gost2012;

    • srckeypass – пароль к ключу в контейнере PKCS#12. Нужно указать то же самое значение, что и для параметра srcstorepass;

    • destkeystore – путь к файлу BKS blitz-keystore.bks, взятому с сервера Blitz Identity Provider;

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

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

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

    • destkeypass – пароль к ключу в BKS.

  10. Заменить файл blitz-keystore.bks на сервере Blitz Identity Provider;

  11. Перезапустить приложения Blitz Identity Provider.

КриптоПро JCP#

Для импорта контейнера в формате КриптоПРО JCP необходимо установить данный криптопровайдер и следовать инструкциям из официальной документации.

Вход через ЕСИА в режиме выбора организации#

Когда для входа в Blitz Identity Provider сконфигурирован внешний поставщик идентификации ЕСИА, то к обычному режиму входа пользователя можно сконфигурировать следующие дополнительные возможности:

  • Отображение пользователю экрана выбора режима входа и организации, если вошедший через ЕСИА пользователь имеет в ЕСИА роли сотрудника индивидуального предпринимателя, юридического лица или органа государственной власти.

../_images/image123.png
  • Получение из ЕСИА сведений о выбранной при входе организации, автоматическое создание на основе этих сведений в LDAP-хранилище группы пользователей с атрибутами, соответствующими организации (если соответствующая организации группа не найдена в момент входа), добавление пользователя в созданную (или найденную) группу пользователей.

  • Обновление атрибутов группы пользователя значениями атрибутов организации из ЕСИА в момент входа, если атрибуты в ЕСИА изменились.

  • Возможность добавления в маркер доступа и маркер обновления сведений о выбранной в момент входа пользователя роли в ЕСИА (физическое лицо, индивидуальный предприниматель, должностное лицо юридического лица, должностное лицо органа государственной власти).

Для настройки режимов входа необходимо предварительно настроить в Blitz Identity Provider использование групп доступа и вход через ЕСИА. После этого необходимо в конфигурационном файле в секции blitz.prod.local.idp.federation в блоке esia создать дополнительный блок настроек org следующего вида:

"federation" : {
  "points" : {
    "esia" : [
      {
        …
        "org" : {
          "embeds" : [
            "documents.elements-1",
            "addresses.elements-1",
            "contacts.elements-1"
          ],
          "group" : {
            "id" : "${org.oid}",
            "mapping" : [
              {
                "attr" : "org_ogrn",
                "master" : true,
                "value" : "${org.ogrn}"
              },
              {
                "attr" : "org_inn",
                "master" : true,
                "value" : "${org.inn}"
              },
              {
                "attr" : "org_fullname",
                "master" : true,
                "value" : "${org.fullName-}"
              },
              {
                  "attr" : "org_shortname",
                  "master" : true,
                  "value" : "${org.shortName-}"
              },
              {
                  "attr" : "org_type",
                  "master" : true,
                  "value" : "${org.type-}"
              },
              {
                  "attr" : "org_oktmo",
                  "master" : true,
                  "value" : "${org.oktmo-}"
              },
              {
                  "attr" : "org_leg",
                  "master" : true,
                  "value" : "${org.leg-}"
              },
              {
                  "attr" : "org_kpp",
                  "master" : true,
                  "value" : "${org.kpp-}"
              },
              {
                  "attr" : "org_phone",
                  "master" : true,
                  "value" : "${org.phone-}"
              },
              {
                  "attr" : "org_email",
                  "master" : true,
                  "value" : "${org.email-}"
              },
              {
                  "attr" : "org_fax",
                  "master" : true,
                  "value" : "${org.fax-}"
              },
              {
                  "attr" : "org_agencytype",
                  "master" : true,
                  "value" : "${org.agencyType-}"
              },
              {
                  "attr" : "org_agencyterrange",
                  "master" : true,
                  "value" : "${org.agencyTerRange-}"
              },
              {
                  "attr" : "org_address_post",
                  "master" : true,
                  "value" : "${org.postAddress-}"
              },
              {
                  "attr" : "org_address_leg",
                  "master" : true,
                  "value" : "${org.legalAddress-}"
              }
          ],
          "matchingRules" : [
            [
              {
                "attr" : "id",
                "value" : "${org.oid}"
              }
            ]
          ],
          "profile" : "orgs"
        },
        "scopes" : [
          "http://esia.gosuslugi.ru/org_addrs",
          "http://esia.gosuslugi.ru/org_leg",
          "http://esia.gosuslugi.ru/org_oktmo",
          "http://esia.gosuslugi.ru/org_inn",
          "http://esia.gosuslugi.ru/org_type",
          "http://esia.gosuslugi.ru/org_kpp",
          "http://esia.gosuslugi.ru/org_ctts",
          "http://esia.gosuslugi.ru/org_agencyterrange",
          "http://esia.gosuslugi.ru/org_ogrn",
          "http://esia.gosuslugi.ru/org_shortname",
          "http://esia.gosuslugi.ru/org_fullname",
          "http://esia.gosuslugi.ru/org_agencytype",
          "http://esia.gosuslugi.ru/org_grps"
        ]
      },
      …
    ]
  }
}

В добавленном блоке нужно скорректировать:

  • набор получаемых из ЕСИА сведений об организации и их маппинг на атрибуты группы пользователей (блок group.mapping), признаком master отметить те атрибуты, которые должны перезаписываться в группе пользователей при каждом обновлении из ЕСИА, полученном в момент входа;

  • набор запрашиваемых в ЕСИА разрешений (настройка scopes).

Если необходимо передавать в маркер идентификации и маркер доступа сведения о текущей выбранной организации и о роли пользователя в ЕСИА, то необходимо настроить соответствие необходимых атрибутов ЕСИА сессионным утверждениям в Blitz Identity Provider. Это выполняется с помощью настройки claims в блоке настроек ЕСИА:

"federation" : {
  "points" : {
    "esia" : [
      {
        …
        "claims" : [
          {
            "name" : "org_id",
            "value" : "org.oid"
          },
          {
            "name" : "global_role",
            "value" : "globalRole"
          },
          {
            "name" : "org_shortname",
            "value" : "org.shortName"
          },
          {
            "name" : "org_fullname",
            "value" : "org.fullName"
          },
          {
            "name" : "org_type",
            "value" : "org.type"
          },
          {
            "name" : "org_ogrn",
            "value" : "org.ogrn"
          },
          {
            "name" : "org_inn",
            "value" : "org.inn"
          },
          {
            "name" : "org_oktmo",
            "value" : "org.oktmo"
          },
          {
          "name" : "org_groups",
          "value" : "org.groupNames"
          },
        }
      },
      …
    ]
  }
}
Доступные атрибуты организации#

Атрибут

Описание

org.shortName

Сокращенное наименование организации

org.fullName

Полное наименование организации

org.type

Тип организации (AGENCY / LEGAL)

org.ogrn

ОГРН организации

org.inn

ИНН организации

org.leg

Код организационно-правовой формы по общероссийскому классификатору организационно-правовых форм

org.kpp

КПП организации

org.agencyTerRange

Территориальная принадлежность ОГВ (только для государственных организаций)

org.agencyType

Тип ОГВ (только для государственных организаций)

org.staffCount

Количество сотрудников организации

org.branchesCount

Количество филиалов организации (только для ЮЛ и ОГВ)

org.phone

Номер телефона организации

org.email

Электронная почта организации

org.fax

Факс организации

org.postAddress

Почтовый адрес организации

org.legalAddress

Юридический адрес организации

Добавление параметров в вызов ЕСИА#

Blitz Identity Provider позволяет добавлять в вызов сервиса аутентификации ЕСИА следующие параметры:

  • obj_type – тип пользователя;

  • roles – тип роли пользователя.

Для того чтобы включить передачу параметров, выполните следующие действия:

  1. Откройте файл конфигурации /usr/share/identityblitz/blitz-config/blitz.conf.

  2. В секции blitz.prod.local.idp.federation.points.esia.authExtParams (настройки ЕСИА) или blitz.prod.local.idp.federation.points.esiadp.authExtParams (цифрового профиля ЕСИА) укажите параметры для добавления в вызов сервиса аутентификации. Параметры необходимо перечислить в виде <имя параметра>: <строковое значение параметра>. Например, для передачи параметров obj_type=P+L&roles=E+C, нужно добавить в файл конфигурации соответствующего поставщика идентификации раздел вида:

    "authExtParams": {
        "obj_type": "P L",
        "roles": "E C"
    },