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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline IronWoodman  
#1 Оставлено : 7 февраля 2023 г. 15:37:39(UTC)
IronWoodman

Статус: Новичок

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

Использую нугет для Windows

using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Text;

LibCore.Initializer.Initialize();

var dataToSign = "ee34f56f-48c9-4a74-87c1-addcda61df38";
var certificateSerial = "046a396e008eaf628c49780521d8f62d6c";
var bytes = Encoding.UTF8.GetBytes(dataToSign);

var contentInfo = new ContentInfo(bytes);
var signedCms = new SignedCms(contentInfo, true);

byte[] signature = null;
using (var myStore = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
myStore.Open(OpenFlags.ReadOnly);
var certColl = myStore.Certificates.Find(X509FindType.FindBySerialNumber, certificateSerial, false);

var cert = certColl[0];

var cmsSigner = new CmsSigner(cert);
signedCms.ComputeSignature(cmsSigner);

signature = signedCms.Encode();
}

ContentInfo contentInfoVerify = new ContentInfo(bytes);

// Создаем SignedCms для декодирования и проверки.
SignedCms signedCmsVerify = new SignedCms(contentInfoVerify, true);

// Декодируем подпись
signedCmsVerify.Decode(signature);

// Проверяем подпись
signedCmsVerify.CheckSignature(true);

Сертификат находит, подпись формирует, но проверка подписи не проходит.

System.Security.Cryptography.CryptographicException: Invalid signature.
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.Prefix(X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly, SignerInfo __instance)
at System.Security.Cryptography.Pkcs.SignerInfo.Verify_Patch1(SignerInfo this, X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignerInfo.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignatures(SignerInfoCollection signers, X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(Boolean verifySignatureOnly)
at Program.<Main>$(String[] args) in C:\Work\Vostok.EPGU\vostok.epgu\api\Signer.Console\Program.cs:line 37

Подскажите пожалуйста в чем может быть проблема.

Отредактировано пользователем 7 февраля 2023 г. 15:39:36(UTC)  | Причина: Не указана

Offline IronWoodman  
#2 Оставлено : 7 февраля 2023 г. 17:08:54(UTC)
IronWoodman

Статус: Новичок

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

С этим разобрался. Если брать хранилище пользователя, а не машины, то проверка подписи проходит успешно.
Однако не проходит проверка в ЕСИА. Всё то же самое делаю из под .net 4.7 проверка ЕСИА - ОК, а LibCore Windows какую-то делает не ту подпись.
Подскажите пожалуйста как с этим быть?
Offline Артём Макаров  
#3 Оставлено : 10 февраля 2023 г. 8:35:17(UTC)
Артём Макаров

Статус: Сотрудник

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 54 раз в 53 постах
Если кто ещё столкнётся - вопрос про ЕСИА решили тут
https://github.com/Crypt...#issuecomment-1422406250

Помогло добавление атрибутов
Код:
cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.