Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Aifar  
#1 Оставлено : 11 апреля 2022 г. 16:55:34(UTC)
Aifar

Статус: Участник

Группы: Участники
Зарегистрирован: 11.04.2022(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 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)
Сообщений: 11

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 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,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Автор: Aifar Перейти к цитате
Казалось бы просто ошибка проверки удаленного сертификата - сохраняешь с сайта сертификат, добавляешь в доверенные центры сертификации, но нет. Все равно падает.
Если сертификат сайта не самоподписанный, то ой! В доверенные надо будет добавить не сам сертификат сайта, а сертификат УЦ, выдавшего сертификат сайта. Впрочем и после этого возможны нюансы - например, сертификат на один домен, а отвечает с эти сертификатом сайт на другом домене.

Offline Aifar  
#4 Оставлено : 6 мая 2022 г. 12:41:18(UTC)
Aifar

Статус: Участник

Группы: Участники
Зарегистрирован: 11.04.2022(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 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)
Сообщений: 11

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 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 };

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.