Статус: Новичок
Группы: Участники
Зарегистрирован: 31.10.2025(UTC) Сообщений: 6 
|
Подпись созданная с помощью dotnetcades не проходит проверку в API ЕСИА и не дает получить токен, при этом подпись сделанная на этой же машине с помощью приложения командной строки cryptcp работает как надо и токен можно получить. OS Ubuntu 24.04.3 Crypto-PRo CSP Ver:5:0.13600 OS:Linux CPU:AMD64 Условие: для получения токена Госключа необходимо отправить запрос на https://esia-portal1.tes...s/api/public/v1/orgs/ext–app/{UUID}/tkn?signature={SIGNATURE} где UUID - это API-ключ, а SIGNATURE - подпись запроса в формате PKCS#7 detached signature в формате urlSafeBase64 в кодировке UTF-8 – подписанный не ранее, чем за 24 часа (86400 с) параметр UUID сертификатом организации, на сотрудника которой был выдан (сформирован) идентификационный ключ Для формирование подписи SIGNATURE и получения токена используется этот код: Код:using dotnetcades;
namespace signconsole;
public static class StaticMethods
{
const string APIKey = "332e92df-886c-46f5-8650-57a7cbc33fc0";
public static async Task<string?> SignDataAsync()
{
using var oStore = new dotnetcades.Store();
oStore.Open(NC.CADESCOM_CURRENT_USER_STORE, NC.CAPICOM_MY_STORE, NC.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
using var oCertificates = oStore.Certificates;
// В хранилище только один сертификат с закрытым ключом
var oCertificate = oCertificates.Item(1);
using var oSigner = new dotnetcades.Signer();
oSigner.Certificate = oCertificate;
// следующие две строки добавлены для возможности использования тестового сертификата госуслуг
oSigner.CheckCertificate = false; // Отключаем проверку сертификата
oSigner.Options = NC.CADESCOM_AllowUntrustedCertificate; // Разрешаем использование недоверенных сертификатов
oSigner.KeyPin = "1234567890";
using var oSignedData = new dotnetcades.SignedData();
oSignedData.Content = APIKey;
var signature = oSignedData.SignCades(oSigner, NC.CADESCOM_PKCS7_TYPE, true, NC.CADESCOM_ENCODE_BASE64);
return signature;
}
public static async Task GetTokenAsync()
{
var sig = await SignDataAsync();
using var httpClient = new HttpClient();
var requestUri =
"https://esia-portal1.test.gosuslugi.ru"
+ "/esia-rs/api/public/v1/orgs/ext-app/"
+ APIKey + "/tkn?signature="
+ System.Net.WebUtility.UrlEncode(sig);
var res = await httpClient.GetAsync(requestUri);
var resContent = await res.Content.ReadAsStringAsync();
Console.WriteLine($"Response: {res.StatusCode} {resContent}");
}
}
При выполнении `GetTokenAsync` получаем ответ Цитата:Unauthorized {"code":"ESIA-005002","message":"Некорректная подпись"} При этом подпись сделанная на этой же машине с помощью приложения командной строки с параметрами: Код:/opt/cprocsp/bin/amd64/cryptcp -sign -uMy -dn=CN -nochain -der -pin 1234567890 -fext .p7s key.txt
проходит проверку и в ответ на GET запрос получаем токен Отредактировано пользователем 31 октября 2025 г. 17:17:02(UTC)
| Причина: DataToSign = APIKey
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,984   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
|
Здравствуйте.
Ответ прям в коде же и условиях...
DataToSign - что внутри?
CADESCOM_ENCODE_BASE64 не равно urlSafeBase64
PKCS#7 detached signature - вообще печально такое читать в документации...
Вы проверяли, что на выходе от cryptcp? |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,984   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
|
detached signature для cryptcp -detach тогда должен быть в параметрах, его нет, верно? cryptcp - формирует cades bes (что уже выше по стандарту, чем древний pkcs7)
UrlEncode от base64 (а строки через LF (!) ) - это нормально будет сервису?
|
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,984   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
|
ради интереса в SignCades указать false ... |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 31.10.2025(UTC) Сообщений: 6 
|
Автор: Андрей *  CADESCOM_ENCODE_BASE64 не равно urlSafeBase64
CADESCOM_ENCODE_BASE64 - это чтобы получить Base64, За UrlSafe отвечает System.Net.WebUtility.UrlEncode(sig)
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 31.10.2025(UTC) Сообщений: 6 
|
Автор: Андрей *  detached signature для cryptcp -detach тогда должен быть в параметрах, его нет, верно? при изменении true на false в Signcades ничего не меняется Отредактировано пользователем 31 октября 2025 г. 17:15:53(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 31.10.2025(UTC) Сообщений: 6 
|
Автор: Андрей *  ради интереса в SignCades указать false ... Пробовал, ничего не меняется
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 31.10.2025(UTC) Сообщений: 6 
|
Автор: Андрей *  DataToSign - что внутри?
Там APIkey, та же строка.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,984   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
|
Автор: Алексей Тюленев  Автор: Андрей *  DataToSign - что внутри?
Там APIkey, та же строка. приложить сюда\в личку примеры файлов хороший\плохой.... |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,984   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
|
Получил файлы, анализ занял 2с... bad.p7s и good.p7s - обе подписи в них - валидны, присоединенные + base64. А вот с подписанными данными - проблема: в bad.p7s - 72 байта подписано в good.p7s - 36... А мы же знаем, что 36... это тот самый.. guid в тестовом варианте... А 72 ... это если... UTF  bad.png (4kb) загружен 5 раз(а). good.png (4kb) загружен 4 раз(а). |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close