Меню

Код ошибки есиа 007005

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
КриптоПро .NET
 » 
ESIA-007005 Подключение к ЕСИА ГОСТ 3410 сертификата (.NET Core web app)


Offline

Aifar

 


#1
Оставлено
:

11 апреля 2022 г. 16:55:34(UTC)

Aifar

Статус: Новичок

Группы: Участники

Зарегистрирован: 11.04.2022(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 1 раз

Здравствуйте
Пытаюсь подключить к .NET Core web app аутентификацию через госуслуги и новым ГОСТ 3410 сертификатом
Подключил исправленный dotnet из https://github.com/Crypt…b/master/docs/Windows.md
Создаю запрос для получения code с госуслуг, чтобы потом получить маркер доступа и остальное; отправляю на https://esia-portal1.tes…suslugi.ru/aas/oauth2/ac

Нужен client_secret:
вот выписка из их методических указаний
<client_secret> – подпись запроса в формате PKCS#7 detached signature в кодировке UTF-8. Содержимое проверено (scope, date,..)

Пробовал и SignCms:

Код:

var signedCms = new SignedCms(new ContentInfo(msg), true);
var cmsSigner = new CmsSigner(Options.ClientCertificate);
signedCms.ComputeSignature(cmsSigner);
return signedCms.Encode();

И чтением из файла:

Код:

byte[] pfx = File.ReadAllBytes(@"MyCert.pfx");
X509Certificate2 cert = new X509Certificate2(pfx, "1", X509KeyStorageFlags.CspNoPersistKeySet);
Gost3410_2012_256 privateKey = cert.PrivateKey as Gost3410_2012_256;

SignedCms signedCms = new SignedCms(new ContentInfo(msg), false);
CmsSigner cmsSigner = new CmsSigner(SubjectIdentifierType.Unknown, cert, privateKey);

signedCms.ComputeSignature(cmsSigner);

return signedCms.Encode();

Первый вопрос: правильно ли так подписывать?
Потому что постоянно приходит ответ с
unauthorized_client;Description=ESIA-007005: The client is not authorized to request an access token using this method.

Да еще и в логах тестовой технологической среды записи:
[2022-04-08 09:30:44,643] [ERROR] [tomcat-exec-18] [ru.atc.esia.aas.oauth2.server.service.impl.RequestServiceImpl] The system [ALTESTO] has no aas feature
[2022-04-08 09:30:44,643] [ERROR] [tomcat-exec-18] [ru.atc.esia.aas.oauth2.server.service.impl.RequestServiceImpl] The client id [ALTESTO] has not been authenticated.

ALTESTO — идентификатор тестовой информационной системы (мнемоника)

Второй вопрос: Но что может означать «aas feature»?

Буду благодарен любой помощи

Сертификат — усиленный гост 3410 с удостоверяющего центра. Но и с самоподписанным из DotnetCoreSampleProject ошибка не меняется

Отредактировано пользователем 11 апреля 2022 г. 17:01:53(UTC)
 | Причина: добавлена информация о сертификатах, изменен заголовок


Вверх


Offline

Aifar

 


#2
Оставлено
:

6 мая 2022 г. 9:03:42(UTC)

Aifar

Статус: Новичок

Группы: Участники

Зарегистрирован: 11.04.2022(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 1 раз

1. Подписывание правильное
2. Никто не знает. Путем штудирования методических указаний и справок выяснилось, что по заявке регистрации нас зарегистрировали у пользователя EsiaTest006@yandex.ru и дополнительно другую тестовую ИС на тестовом технологическом портале создавать не надо. Как только настроили нашу ИС (загрузили сертификаты, указали редирект урлы) смогли получить код авторизации.

Только теперь падает в исключении при отправке запроса маркера доступа на https://esia-portal1.tes…suslugi.ru/aas/oauth2/te

Win32Exception: Предоставленный функции токен неправилен
System.Net.Security.SecureChannel.CreateFatalHandshakeAlertToken(SslPolicyErrors sslPolicyErrors, X509Chain chain)
System.Net.Security.SecureChannel.VerifyRemoteCertificate(RemoteCertValidationCallback remoteCertValidationCallback, ref ProtocolToken alertToken)

Казалось бы просто ошибка проверки удаленного сертификата — сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает.


Вверх


Offline

two_oceans

 


#3
Оставлено
:

6 мая 2022 г. 9:59:37(UTC)

two_oceans

Статус: Эксперт

Группы: Участники

Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,598
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 388 раз в 363 постах

Автор: Aifar Перейти к цитате

Казалось бы просто ошибка проверки удаленного сертификата — сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает.

Если сертификат сайта не самоподписанный, то ой! В доверенные надо будет добавить не сам сертификат сайта, а сертификат УЦ, выдавшего сертификат сайта. Впрочем и после этого возможны нюансы — например, сертификат на один домен, а отвечает с эти сертификатом сайт на другом домене.


Вверх


Offline

Aifar

 


#4
Оставлено
:

6 мая 2022 г. 12:41:18(UTC)

Aifar

Статус: Новичок

Группы: Участники

Зарегистрирован: 11.04.2022(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 1 раз

Автор: two_oceans Перейти к цитате

Автор: Aifar Перейти к цитате

Казалось бы просто ошибка проверки удаленного сертификата — сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает.

Если сертификат сайта не самоподписанный, то ой! В доверенные надо будет добавить не сам сертификат сайта, а сертификат УЦ, выдавшего сертификат сайта. Впрочем и после этого возможны нюансы — например, сертификат на один домен, а отвечает с эти сертификатом сайт на другом домене.

Нашел в сертификате ссылку на их УЦ, скачал их сертификат, поставил. Не сильно помогло.

Также падает:

Код:

Win32Exception: Предоставленный функции токен неправилен
System.Net.Security.SecureChannel.CreateFatalHandshakeAlertToken(SslPolicyErrors sslPolicyErrors, X509Chain chain)
System.Net.Security.SecureChannel.VerifyRemoteCertificate(RemoteCertValidationCallback remoteCertValidationCallback, ref ProtocolToken alertToken)
System.Net.Security.SslStream.CompleteHandshake(ref ProtocolToken alertToken)
System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.StartSendBlob(byte[] incoming, int count, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.ProcessReceivedBlob(byte[] buffer, int count, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.StartReadFrame(byte[] buffer, int readBytes, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.StartReceiveBlob(byte[] buffer, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.StartSendBlob(byte[] incoming, int count, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.ProcessReceivedBlob(byte[] buffer, int count, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.StartReadFrame(byte[] buffer, int readBytes, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
System.Net.Security.SslStream.ThrowIfExceptional()
System.Net.Security.SslStream.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
System.Net.Security.SslStream.EndProcessAuthentication(IAsyncResult result)
System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
System.Net.Security.SslStream+<>c.<AuthenticateAsClientAsync>b__65_1(IAsyncResult iar)
System.Threading.Tasks.TaskFactory<TResult>.FromAsyncCoreLogic(IAsyncResult iar, Func<IAsyncResult, TResult> endFunction, Action<IAsyncResult> endAction, Task<TResult> promise, bool requiresSynchronization)
System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)

Должны ли запросы отправляться с сервера у которого тоже действительный сертификат? У меня сейчас Kestrel с самоподписанным для https стоит

Отредактировано пользователем 6 мая 2022 г. 12:43:02(UTC)
 | Причина: Не указана


Вверх


Offline

Aifar

 


#5
Оставлено
:

6 мая 2022 г. 16:15:53(UTC)

Aifar

Статус: Новичок

Группы: Участники

Зарегистрирован: 11.04.2022(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 1 раз

Сертификаты не помогли.
Решил пока проверку полностью убрать. Ошибки проверки удаленного сертификата проверятся не будут.

Сделал по примеру из https://stackoverflow.co…could-not-be-established

Просто добавил в конструктор

Код:


httpClientHandler = new HttpClientHandler();
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) =>
{
	return true;
};

httpClient = new HttpClient(httpClientHandler) { BaseAddress = null };


Вверх

Пользователи, просматривающие эту тему

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.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Код ошибки ее на газовой колонке оазис
  • Код ошибки е98 бакси котел