Пример интеграции с сервисом ЕСИА (Госуслуги) без использования криптопровайдера КриптоПро CSP. Для использования сервиса предполагается пройти следующие шаги:
Необходимо пройти регистрацию информационной системы организации на Технологическом портале. Подробнее обо всех этапах регистрации здесь!
ЕСИА поддерживает ключи с алгоритмом шифрования ГОСТ-2012, которые подразумевают работу с помощью криптопровайдера КриптоПро CSP. Тогда как в данном случае используется альтернативный вариант c использованием стандарта PKCS#12. Для этого необходимо проделать следующие действия:
- Использовать ключ ЭЦП, выданный Компании для работы с государственными сервисами или отправки отчетности.
- Скопировать контейнер на диск доступный в системе, например, диск С, в результате получится папка вида folder.000 с файлами *.key (Примечание: Если возможность копирования контейнера заблокирована издателем, то можно воспользоваться утилитами для разблокировки этой функции, например, CertFix)
- Клонировать репозиторий с https://github.com/kov-serg/get-cpcert и собрать билд согласно инструкции в описании. Скопировать папку с ключами в директорию с утилитой. Выполнить:
./get-cpcert folder.000 12345678 > bundle.pem
folder.000 – папка с ключами, 12345678 — пароль по умолчанию от контейнера или другой, установленный при копировании контейнера, bundle.pem – файл, содержащий закрытй и публичный ключи(результат работы утилиты).
- Открыть файл bundle.pem и скопировать содержимое строк -----BEGIN PRIVATE KEY----- и-----END PRIVATE KEY-----, а также -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- сохранив при этом в разные файлы соотвественно - private.key и public.cer.
- Файл public.cer необходимо загрузить в ЛК технологического портала - раздел Сертификаты.
- Файлы — private.key и public.cer, необходимо сохранить в единый контейнер PFX, используя утилиту OpenSSL. ВАЖНО Перед использованием утилиты OpenSSL, проверить поддержку алгоритмов ГОСТ:
openssl engine gost -c
(gost) Reference implementation of GOST engine
[gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, grasshopper-ecb, grasshopper-cb
c, grasshopper-cfb, grasshopper-ofb, grasshopper-ctr, md_gost94, gost-mac, md_go
st12_256, md_gost12_512, gost-mac-12, gost2001, gost-mac, gost2012_256, gost2012
_512, gost-mac-12]
openssl pkcs12 -export -in public.cer -inkey private.key -out bundle.pfx -name "esia"
Параметр name устанавливает алиас контейнера, а так же при сохранении файла необходимо задать пароль
- Скопировать bundle.pfx в src/main/resources/
- esia.key-alias=[алиас PFX контейнера]
- esia.keystore-password=[пароль PFX контейнера]
- esia.client-id=[мнемоника ИС из ЛК]
- esia.scope=[scope ИС] - openid fullname id_doc...
- esia.redirect-base-url=[адрес для редиректа] - https://your-domain.com (Должен быть добавлен в ЛК Технологического портала - URL системы)
- esia.redirect-uri-ac=[точка для роутинга] - /esia/auth
- esia.redirect-uri-te=[точка для роутинга] - /esia/done?
mvn clean compile package
java -jar esia-service-1.0.jar
GET http://localhost:8888/esia/login - получить страницу авторизации на сайте Госуслуги
ESIA-007019 (invalid_scope) - причина в указанных scope, которые недоступны для ИС Организации
Данный кейс не претендует на эталонную реализацию, а демонстрирует возможность интеграции с сервисом ЕСИА без ключевого носителя