Method_not_support_gost_2015

xml Добрый день!

Я работаю над проектом на C# с использованием WinForms и сталкиваюсь с проблемой при выполнении SOAP-запроса. Возвращается ошибка METHOD_NOT_SUPPORT_GOST_2015 . Не могли бы вы помочь проверить формат XML-файла, чтобы выяснить, по какой причине возникает эта ошибка?

Используется KalkanCryptCOM

image

Получилось решить проблему?
Похоже обновление на новые ключи
https://pro1c.kz/news/avtomatizatsiya/novyy-metod-autentifikatsii-na-portale-is-esf-/

Добрый день! Возможно у Вас стоит старя версия библиотеки KalkanCryptCOM и надо будет обновить до новой версии. Есть возможность просмотра версии библиотеки?

Аналогичная проблема, получили новый сертификат (1 файл вместо старых двух), подписываем локальным сервером из комплекта разработчика, и при попытке открытия сессии выдает METHOD_NOT_SUPPORT_GOST_2015. Как с этим бороться? Поддержка на письма не отвечает, ни esfsd@kgd.minfin.gov.kz, ни esfsupport@osdkz.com. Или у них другой адрес теперь? Брал с сайта

Добрый день!
Один файл на алгоритме Гост Р 34.10 2015 выдается с 28 апреля 2024 года.

Вам необходимо обновить комплект разработчика НУЦ РК для работы с алгоритмом Гост2015

Если Вы просто обновите комплект разработчика, то старые методы работать все равно не станут. Разобравшись, пришли к тому, что и метод получения сессии надо применять не createSessionAsync, а createSessionSignedAsync с обращением в сервис получения тикетов AuthService (https://esf.gov.kz:8443/esf-web/ws/api1/AuthService?wsdl) и использовать полученный тикет уже в методе сессии

Вот что сказала поддержка

%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Добрый день!

Прошу прощения за поздний ответ. Данный вопрос был решён уже давно с использованием LocalService. В этом случае библиотека KalkanCryptCOM не применялась.

image

кстати да, я тоже использовал localServer для подписей. Но причина была не в нем изначально, а в новом методе открытия сессии с тикетами

@Talgat @Daniyar
Добрый день, можете показать как вы подключались для создания сессии (на csharp) ?
что за метод CreateSessionSigned ? не видел такого в документации

У меня есть и p12 сертификат и пароль пытаюсь загрузить его к запросу через X509CertificateLoader.LoadPkcs12FromFile но он не поддерживает данный формат (ГОСТ 34.10-2015)

сейчас подключаемся вот так

               var cert = X509CertificateLoader.LoadPkcs12FromFile(
                     "test.p12",
                     password: "pass",
                     X509KeyStorageFlags.Exportable);

                var binding = var binding = new BasicHttpBinding(...);
                var address = new EndpointAddress("...esf-web/ws/api1/SessionService");
                var client = new SessionServiceClient(binding, address);
                client.ClientCredentials.ClientCertificate.Certificate = cert;
// ....
               var request = new CreateSessionRequest
               {
                   Tin = request.Tin,
                   X509Certificate = request.X509Certificate,
               };
               createSessionResponse1? response1 = await client.createSessionAsync(request);

я так понимаю если подключить таким образом сертификат то секция Header с WS-Security в xml реквеста заполниться сама даными, или нужно еще самим ее заполнять ?

Добрый день!
Для работы с ключами НУЦ РК необходимо пользоваться софтом НУЦ РК. Его вы можете получить, скачав SDK НУЦ РК.
Здесь вы можете ознакомиться с процессом получения SDK: https://pki.gov.kz/developers

Добрый день!

Метод CreateSessionSigned - это собственная разработка. Перед этим необходимо выполнить несколько шагов:

Шаг 1: Создание аутентификационного тикета
public async Task CreateAuthTicket(string iin); // метод на C#

Шаг 2: Подпись полученного тикета
public string GenerateDocumentXmlSignature(string ticketXml, string certificatePath, string certificatePin). На втором шаге для подписи тикета используется LocalServer. Его можно скачать отсюда: https://esf.gov.kz:8443/esf-web/app/pages/api, есть комплект разработчика.

Шаг 3: Создание сессии
public async Task CreateSessionSigned(string username, string password, string tin, string signedAuthTicket, string sourceType)

мы все эти шаги сделали, но запросы постоянно падают с ошибкой
“A security error was encountered when verifying the message”

нужно ли самому проставлять секцию soapenv:Header wsse:Security ?

и как вы загружаете сертификат p12 ГОСТ в csharp (черех X509Certificate2 не выходит) и нужно ли вообще его подгружать ?

Скачанный LocalServer разверните в папке C:\LocalServer , и сюда же скопируйте нужный файл ключа *.p12. Ниже приведён метод, который с помощью ключа и LocalServer подпишет тикет и вернёт подписанный тикет. Дальше этот тикет вы будете использовать для создания сессии. Где параметр certificatePath имя файла ключа *.p12
image

на моменте получения айди сессии вот такое прилетает
можете показать как вы отправляете запрос на SessionService в коде метод
public async Task CreateSessionSigned (string username, string password, string tin, string signedAuthTicket, string sourceType)

image image

Я делаю запрос через XML-шаблон. Кажется, у вас не хватает следующих параметров: Username и Password.

C# код
// Чтение шаблона SOAP.
string soapTemplate = File.ReadAllText(templatePath);
string soapEnvelope = soapTemplate
.Replace("{{UserName}}", username)
.Replace("{{Password}}", password)
.Replace("{{tin}}", tin)
.Replace("{{SignedAuthTicket}}", signedAuthTicket)
.Replace("{{SourceType}}", sourceType);

Содержание XML шаблона:
templatePath = Path.Combine(AppContext.BaseDirectory, “SOAPTemplates\createSessionSigned.xml”);

<soap-env:Envelope
xmlns:soap-env=“http://schemas.xmlsoap.org/soap/envelope/”>
<soap-env:Header
xmlns:wsu=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd”>
<wsse:Security
xmlns:wsse=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd”>
<wsse:UsernameToken wsu:Id=“un-12156E06C50C1FD0889B054B721C89A0”>
wsse:Username{{UserName}}</wsse:Username>
<wsse:Password Type=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText”>{{Password}}</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap-env:Header>
soap-env:Body
<n0:createSessionSignedRequest
xmlns:n0=“esf”
xmlns:prx=“urn:sap.com:proxy:KEQ:/1SAI/TAS133B2FE13AB7B2D280F5:754”>
{{tin}}
{{SignedAuthTicket}}
{{SourceType}}
</n0:createSessionSignedRequest>
</soap-env:Body>
</soap-env:Envelope>

А что такое password и username ?
у меня есть только сертификат и пароль к самому сертификату

username это БИН? ИИН? или вообще что-то другое ?
password это пароль от сертификата или отдельный пароль ?

Добрый день,
с username и password мы разобрались, это ИИН и отдельный пароль который у нас есть

получилось даже достучаться до сервиса с помощью утилиты curl и получить SessionId

НО возникают проблемы с csharp, не получаеться создать правильный реквест )

можете показать как вы настраивали клиента что бы отправить этот запрос из XML шаблона ?