Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
ESIA-007005 Подключение к ЕСИА ГОСТ 3410 сертификата (.NET Core web app)
|
Aifar |
|
|
Статус: Новичок Группы: Участники Сказал(а) «Спасибо»: 1 раз |
Здравствуйте Нужен client_secret: Пробовал и SignCms: Код:
И чтением из файла: Код:
Первый вопрос: правильно ли так подписывать? Да еще и в логах тестовой технологической среды записи: ALTESTO — идентификатор тестовой информационной системы (мнемоника) Второй вопрос: Но что может означать «aas feature»? Буду благодарен любой помощи Сертификат — усиленный гост 3410 с удостоверяющего центра. Но и с самоподписанным из DotnetCoreSampleProject ошибка не меняется Отредактировано пользователем 11 апреля 2022 г. 17:01:53(UTC) |
![]() |
|
|
Aifar |
|
|
Статус: Новичок Группы: Участники Сказал(а) «Спасибо»: 1 раз |
1. Подписывание правильное Только теперь падает в исключении при отправке запроса маркера доступа на https://esia-portal1.tes…suslugi.ru/aas/oauth2/te Win32Exception: Предоставленный функции токен неправилен Казалось бы просто ошибка проверки удаленного сертификата — сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает. |
![]() |
|
|
two_oceans |
|
|
Статус: Эксперт Группы: Участники Сказал(а) «Спасибо»: 110 раз |
Автор: Aifar Казалось бы просто ошибка проверки удаленного сертификата — сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает. Если сертификат сайта не самоподписанный, то ой! В доверенные надо будет добавить не сам сертификат сайта, а сертификат УЦ, выдавшего сертификат сайта. Впрочем и после этого возможны нюансы — например, сертификат на один домен, а отвечает с эти сертификатом сайт на другом домене. |
![]() |
|
|
Aifar |
|
|
Статус: Новичок Группы: Участники Сказал(а) «Спасибо»: 1 раз |
Автор: two_oceans Автор: Aifar Казалось бы просто ошибка проверки удаленного сертификата — сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает. Если сертификат сайта не самоподписанный, то ой! В доверенные надо будет добавить не сам сертификат сайта, а сертификат УЦ, выдавшего сертификат сайта. Впрочем и после этого возможны нюансы — например, сертификат на один домен, а отвечает с эти сертификатом сайт на другом домене. Нашел в сертификате ссылку на их УЦ, скачал их сертификат, поставил. Не сильно помогло. Также падает: Код:
Должны ли запросы отправляться с сервера у которого тоже действительный сертификат? У меня сейчас Kestrel с самоподписанным для https стоит Отредактировано пользователем 6 мая 2022 г. 12:43:02(UTC) |
![]() |
|
|
Aifar |
|
|
Статус: Новичок Группы: Участники Сказал(а) «Спасибо»: 1 раз |
Сертификаты не помогли. Сделал по примеру из https://stackoverflow.co…could-not-be-established Просто добавил в конструктор Код:
|
![]() |
|
| Пользователи, просматривающие эту тему |
|
Guest |
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
ESIA-007005 Подключение к ЕСИА ГОСТ 3410 сертификата (.NET Core web app)
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Настраиваем авторизацию сайта через ЕСИА.
Проблема: После перехода по сформированной ссылке с подписью переходим на страницу авторизации, вводим данные, получаем ошибку «Ошибка авторизации», в адресе страницы есть подробности
error_description=ESIA-007005%3A+The+client+is+not+authorized+to+request+an+access+token+using+this+method
Имеется машина с докером.
Установлен докер контейнер https://hub.docker.com/r/required/cryptopro
Установлен корневой сертификат, сертификат клиента, стоит пробный ключ для КриптоПро.
Цепочки сертификатов проверены методом копирования (https://www.altlinux.org/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%9F%D1%80%D0%BE#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D1%86%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2)
cryptcp -copycert -thumbprint "$thumbprint" -df tt.cer
На выходе
Certificate chains are checked
Для ЕСИА требуется подпись в формате PKCS#7 detached signature в кодировке UTF8, затем кодированная в url safe base64
Погуглив, нашел такой вариант:
csptest -sfsign -sign -detached -base64 -add -alg "GOST12_256" -in message -out sig
Файл подписывается, проверяю
csptest -sfsign -verify -detached -base64 -add -alg "GOST12_256" -in message -signature sig
На выходе:
Detached Signature was verified OK
Вопрос — в чем может быть проблема? Куда копать?
UPD: Есть сервис, который умеет подписывать этим же сертификатом, написан на Java и с его подписью ЕСИА авторизует. Сравнив нашу ссылку и ссылку сервиса — нашли отличия только в строке client_secret, то есть в подписи.
Прекрасная история о том, как чудным утром понедельника мой оператор #tele2 решил, проверить мои паспортные данные в соответствии с постановлением правительства от 1.06.2018 года. Соответствующая смс пришла на телефон, с предупреждением, что у меня есть на всё про всё 2 недели и подтвердить я могу на сайте через аутентификацию на госуслугах или в любом офисе. Т.к. вынуждено застрял на несколько месяцев за рубежом, полез делать через госуслуги, благо подтвержденная учетка там имеется. НО на любую попытку мне выдается прекрасное «При передаче данных произошел сбой. Пожалуйста, подтвердите паспортные данные еще раз». Попробовал несколько устройств, ошибка везде и через десктоп и через мобильное приложение теле2.
Пишу в саппорт, сначала предложили перелогиниться, потом попросили скриншот, далее пропали из чата на 30 минут, за это время в чат подключались новые люди, но молчали, в итоге оператор Екатерина, сказала, что госуслуги лишь опция и если я не могу прийти в офис в течение 2 недель, то прощай связь, а значит и доступ в банки, в кучу сервисов, где двухфакторная авторизация и т.п. на вопрос, как это так? Отправили «Если вас не устраивает данный закон — можете обратиться к правительству)» прям со смайликом, видимо Екатерине весело, что человек в отъезде может лишиться коммуникации, особенно в текущее не самое веселое время.
Спасибо #tele2 за поддержку! «Лучший оператор»
p/s По итогам, сотрудник tele2 предоставил отсрочку и сказал, что работы по госуслугам ведутся. По крайней мере временно проблема решена.
Актуальную версию документа см. на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации по адресу https://digital.gov.ru/ru/documents/6186/.
|
N |
Код параметра |
Описание параметра |
|
1. |
invalid_request |
ESIA-007003: В запросе отсутствует обязательный параметр, запрос включает в себя неверное значение параметра или включает параметр несколько раз |
|
2. |
access_denied |
ESIA-007004: Владелец ресурса или сервис авторизации отклонил запрос |
|
3. |
unauthorized_client |
ESIA-007005: Система-клиент не имеет права запрашивать получение маркера доступа таким методом |
|
4. |
invalid_scope |
ESIA-007006: Запрошенная область доступа (scope) указана неверно, неизвестно или сформирована некорректно |
|
5. |
server_error |
ESIA-007007: Возникла неожиданная ошибка в работе сервиса авторизации, которая привела к невозможности выполнить запрос |
|
6. |
temporarily_unavailable |
ESIA-007008: Сервис авторизации в настоящее время не может выполнить запрос из-за большой нагрузки или технических работ на сервере |
|
7. |
unsupported_response_type |
ESIA-007009: Сервис авторизации не поддерживает получение маркера доступа этим методом |
|
8. |
invalid_client |
ESIA-008010: Не удалось произвести аутентификацию системы-клиента |
|
9. |
invalid_grant |
ESIA-007011: Авторизационный код или маркер обновления недействителен, просрочен, отозван или не соответствует адресу ресурса, указанному в запросе на авторизацию, или был выдан другой системе-клиенту |
|
10. |
unsupported_grant_type |
ESIA-007012: Тип авторизационного кода не поддерживается сервисом авторизации |
|
11. |
invalid_scope |
ESIA-007013: Запрос не содержит указания на область доступа (scope) |
|
12. |
invalid_request |
ESIA-007014: Запрос не содержит обязательного параметра [] |
|
13. |
invalid_request |
ESIA-007015: Неверное время запроса |
|
14. |
no_grants |
ESIA-007019: Отсутствует разрешение на доступ |
|
15. |
invalid_request |
ESIA-007023: Указанный в запросе <redirect_uri> отсутствует среди разрешенных для информационной системы |
Вот код clientSecret:
public static PKCS10CertificationRequest generateRequest(
PrivateKey priv,
PublicKey publ,
String name,
String scope,
String timestamp,
String client_id,
String state)
throws Exception
{
GeneralNames subjectAltName = new GeneralNames(
new GeneralName(GeneralName.uniformResourceIdentifier, scope + ", " + timestamp +", " + client_id +", " + state.replace("-", "")));
Vector oids = new Vector();
Vector values = new Vector();
oids.add(X509Extensions.AuthorityInfoAccess);
values.add(new X509Extension(false, new DEROctetString(subjectAltName)));
X509Extensions extensions = new X509Extensions(oids, values);
Attribute attribute = new Attribute(
PKCSObjectIdentifiers.pkcs_9_at_extensionRequest,
new DERSet(extensions));
return new PKCS10CertificationRequest(
"SHA256withRSA",
new X500Principal(name),
publ,
new DERSet(attribute),
priv);
}
Потом отправляю запрос! Ответ мне приходит:
ESIA-007005: The client is not authorized to request an access token
using this method
Есть какие то конкретные предложения?
Приложение демонстрирует получение авторизационного кода из системы ЕСИА (Госуслуги).
Актуальная версия «Методических рекомендаций по использованию Единой системы идентификации и аутентификации»: 2.76.
Подготовка
Предполагается, что регистрация системы в ЕСИА выполнена, и контейнер с сертификатом и приватным ключом получен.
ПО
Используется java-криптопровайдер КриптоПро JCP версии 2.0.41789-R4 и Java 8.
КриптоПро JCP должен быть установлен в JDK (JRE), в которой запускается данное приложение.
Для Windows и Java 8 установка КриптоПро JCP может быть выполнена при помощи setup.exe в скаченном дистрибутиве.
Контейнер
Контейнер КриптоПро читается из стандартного расположения в файловой системе.
Для Windows это C:Users%username%AppDataLocalCrypto Pro, куда необходимо поместить директорию с контейнером.
Убедитесь, что Вы видите контейнер с ключом и сертификатом в GUI КриптоПро JCP во вкладке «Хранилища ключей и сертификатов» в папке HDImageStore.
Запуск
Для работы приложения требуются следующие переменные среды:
| Переменная | Описание |
|---|---|
| ESIA_CLIENT_ID | идентификатор системы-клиента (мнемоника системы в ЕСИА) |
| ESIA_KEYSTORE_ALIAS | алиас ключа и сертификата в контейнере |
| ESIA_PRIVATE_KEY_PASSWORD | пароль приватного ключа в контейнере |
Для запуска выполните mvn spring-boot:run или используйте любой другой способ запуска Spring Boot приложения.
Помните, что для запуска необходима JDK (JRE) с установленным КриптоПро JCP.
После запуска откройте в браузере http://localhost:8080.
Нажмите login with esia. Пройдите авторизацию (тестовой) записью и подтвердите запрошенные разрешения.
Вы будете перенаправлены обратно на страницу приложения.
При успехе Вы увидите полученный авторизационный код и его содержимое (если это jwt).
При неудаче — сообщение об ошибке и описание ошибки.
Troubleshooting
- ESIA-007005: The client is not authorized to request an access token using this method.
Вводящая в заблуждение формулировка сообщения об ошибке. Вероятнее всего некорректно сформирован параметр client_secret.
Возможно, Вы используете незарегистрированный в ЕСИА сертификат или неподдерживаемый алгоритм формирования подписи.
- ESIA-007014: The request doesn`t contain the mandatory parameter [timestamp].
Такое сообщение об ошибке может быть получено, даже если параметр timestamp в запросе присутствует.
Вероятнее всего, некорректный формат параметра timestamp. Обратите внимание на url-encoding символов.
Пример корректного параметра timestamp: timestamp=2021.02.12+00%3A15%3A26+%2B0300.
- После прохождения авторизации в ЕСИА не происходит возвращение в приложение.
Некорректно сформирован параметр redirect_uri. Обратите внимание на url-encoding символов.
Пример корректного параметра redirect_uri: redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fesia_return.

