Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Авторизация на Госуслугах с использованием PKCS#7 detached signature
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.11.2023(UTC) Сообщений: 8 Сказал(а) «Спасибо»: 1 раз
|
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, разобраться с авторизацией на Госуслугах. Задача: требуется "подпись запроса в формате PKCS#7 detached signature в формате urlSafeBase64 в кодировке UTF-8 – подписанный не ранее, чем за 24 часа (86400 с) параметр UUID сертификатом организации, на сотрудника которой был выдан (сформирован) идентификационный ключ". Я установила КриптоПро .NET и КриптоПро .NET SDK. Нашла примеры - .NET SDK\Examples\simple.zip\CMS\cs\DetachedSignature.cs Приложение на c#, netcoreapp3.1. Формирую подпись следующим образом: Код:public static byte[] DoIt(string thumbprint, string msg)
{
Encoding unicode = Encoding.UTF8;
byte[] msgBytes = unicode.GetBytes(msg);
X509Certificate2 signerCert = GetSignerCert(thumbprint);
byte[] encodedSignature = SignMsg(msgBytes, signerCert);
VerifyMsg(msgBytes, encodedSignature);
return encodedSignature;
}
private static X509Certificate2 GetSignerCert(string thumbprint)
{
var storeMy = new X509Store(StoreName.My, StoreLocation.CurrentUser);
storeMy.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certColl = storeMy.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
storeMy.Close();
return certColl[0];
}
private static byte[] SignMsg(byte[] msg, X509Certificate2 signerCert)
{
var contentInfo = new ContentInfo(msg);
var signedCms = new SignedCms(contentInfo, true);
var cmsSigner = new CmsSigner(signerCert);
signedCms.ComputeSignature(cmsSigner);
return signedCms.Encode();
}
private static void VerifyMsg(byte[] msg, byte[] encodedSignature)
{
var contentInfo = new ContentInfo(msg);
var signedCms = new SignedCms(contentInfo, true);
signedCms.Decode(encodedSignature);
signedCms.CheckSignature(true);
}
Далее преобразовываю полученный массив байт в строку и заменяю спец.символы: Код:public static string Encode(byte[] bytes)
{
string data = Convert.ToBase64String(bytes);
return data;
}
public static string PrepareSafeUrl(string data)
{
data = data.TrimEnd('=');
data = data.Replace("+", "%2b");
data = data.Replace("/", "%2f");
data = data.Replace("=", "%3d");
return data;
}
Итоговый код: Код:byte[] signatureArray = DetachedSignatureCompact.DoIt(thumbprint, apiCode);
string signature = TrueEncodeHelper.Encode(signatureArray);
signature = TrueEncodeHelper.PrepareSafeUrl(signature);
Далее обращаюсь к методу REST API ЕСИА GET >/esia-rs/api/public/v1/orgs/ext-app/{UUID}/tkn и получаю Цитата:{"code":"ESIA-005002","message":"Invalid signature"} Что означает: Некорректная подпись запроса (параметр signature некорректного формата или подписанный UUID не соответствует указанному в URL метода параметру UUID). Помогите, пожалуйста, как нужно правильно преобразовать сформированную подпись?
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Авторизация на Госуслугах с использованием PKCS#7 detached signature
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close