Статус: Новичок
Группы: Участники
Зарегистрирован: 16.10.2014(UTC) Сообщений: 8
Сказал(а) «Спасибо»: 1 раз
|
Помогите разобраться. Пытаюсь проверить Raw подпись JWT токена полученого от ЕСИА в результате прохождения OIDC flow. Окружение- Windows 10 - CSP 5.0.12500 KC1 - LibCore.Windows Version="2023.9.26.1" Данные- JWT токен eyJ2ZXIiOjEsInR5cCI6IkpXVCIsInNidCI6ImFjY2VzcyIsImFsZyI6IkdPU1QzNDEwXzIwMTJfMjU2In0.eyJuYmYiOjE3MDEyNTQ1NzUsInNjb3BlIjoidXNyX3JlZ19jeHQ_b2lkPTEwMDAzMjg2ODYgZW1haWw_b2lkPTEwMDAzMjg2ODYgb3BlbmlkIHVzcl9hdnQ_b2lkPTEwMDAzMjg2ODYgdXNyX29yZz9vaWQ9MTAwMDMyODY4NiBmdWxsbmFtZT9vaWQ9MTAwMDMyODY4NiBtb2JpbGU_b2lkPTEwMDAzMjg2ODYiLCJpc3MiOiJodHRwOlwvXC9lc2lhLXBvcnRhbDEudGVzdC5nb3N1c2x1Z2kucnVcLyIsInVybjplc2lhOnNpZCI6ImExNTEwY2IyLTAxMTItZjJmNS0zZGI2LTZiYzc1ZGI0MGUwZSIsInVybjplc2lhOnNial9pZCI6MTAwMDMyODY4NiwiZXhwIjoxNzAxMjU4MTc1LCJpYXQiOjE3MDEyNTQ1NzUsImNsaWVudF9pZCI6IkNUUFJGX1JVIn0.cz8DPKHZvTsF__reCBDsZ4ZPxehs4qanCmiJjJr2slzrWTmv_HkScguPGU5NDlyJrxi25Tv8rcqfg7YM0PKsDg - Сертификат [TESIA GOST 2012.zip] TESIA GOST 2012.zip (2kb) загружен 2 раз(а).Получил по ссылке из дока Методические указания по использованию ЕСИА (http://esia.gosuslugi.ru/public/esia.zip) КодПолучение сертификата из хранилища - тут все ОК Код:
private static string SerialNumberTest = "014018b300ffafd593465c5c2de413c849";
private static X509Certificate2 GetCert()
{
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySerialNumber, SerialNumberTest, false);
if (certs.Count == 0)
throw new EsiaServiceException("Certificate is not found");
return certs[0];
}
}
Проверка подписи 1 - при любом reverseSignature Код:
private static void VerifySignature1(string accessToken, bool reverseSignature)
{
var parts = accessToken.Split('.');
var message = Encoding.UTF8.GetBytes($"{parts[0]}.{parts[1]}");
var sign = Base64UrlEncoder.DecodeBytes(parts[2]);
if (reverseSignature)
Array.Reverse(sign, 0, sign.Length);
var certificate = GetCert();
using (var csp = certificate.GetGost3410_2012_256PublicKey())
{
var result = csp.VerifyData(message, sign, CpHashAlgorithmName.Gost3411_2012_256);
if (!result)
throw new Exception("Invalid signature");
}
}
Проверка подписи 2 - при любом reverseSignature Код:
private static void VerifySignature2(string accessToken, bool reverseSignature)
{
var parts = accessToken.Split('.');
var message = Encoding.UTF8.GetBytes($"{parts[0]}.{parts[1]}");
var sign = Base64UrlEncoder.DecodeBytes(parts[2]);
if (reverseSignature)
Array.Reverse(sign, 0, sign.Length);
var certificate = GetCert();
using (var csp = certificate.GetGost3410_2012_256PublicKey())
{
using (var hasher = Gost3411_2012_256.Create())
{
var hash = hasher.ComputeHash(message);
var formatter = new Gost2012_256SignatureDeformatter(csp);
formatter.SetHashAlgorithm(nameof(Gost3411_2012_256));
var ret = formatter.VerifySignature(hash, sign);
Assert.False(ret);
}
}
}
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.05.2024(UTC) Сообщений: 2
|
Аналогичная проблема. Если получилось разобратсья, расшарь пожалуйста решение 🙏
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.05.2024(UTC) Сообщений: 2
|
убрала reverseSignature, все заработало. Вдруг кому-то будет полезно
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close