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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline santay2009  
#1 Оставлено : 27 июля 2023 г. 15:30:02(UTC)
santay2009

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

Группы: Участники
Зарегистрирован: 27.07.2023(UTC)
Сообщений: 1
Российская Федерация

Работаю с сертификатом мира *.cer.
Для Windows есть такой сервис:
Цитата:
public sealed class CryptoService : ICryptoService
{
public async Task<byte[]> SignFile(Stream document, CancellationToken cancellationToken = default)
{
if (document is null || document == Stream.Null || !document.CanSeek)
throw new CryptoSignerException("Stream входных данных для подписания невозможно редактировать!", StatusCode.InvalidRequest);

byte[] documentBuffer;

//создаём свой Stream документа
if (document is MemoryStream documentStream)
{
documentStream.Seek(0, SeekOrigin.Begin);
documentBuffer = documentStream.ToArray();
await documentStream.DisposeAsync();
}
else
await using (documentStream = new MemoryStream())
{
await document.CopyToAsync(documentStream, cancellationToken);
documentStream.Seek(0, SeekOrigin.Begin);
documentBuffer = documentStream.ToArray();
}

//получение сертификата
var storeMy = new X509Store(StoreName.My,
StoreLocation.CurrentUser);
storeMy.Open(OpenFlags.ReadOnly);
var certColl =
storeMy.Certificates.Find(X509FindType.FindBySerialNumber, "0166E7A50000B04C8049C2C3CBE96039B4", false);
using var x509Certificate = certColl[0];
var contentInfo = new ContentInfo(documentBuffer);
var signedCms = new SignedCms(contentInfo, true);
var cmsSigner = new CmsSigner(x509Certificate);
//подпись файла
signedCms.ComputeSignature(cmsSigner);
var signedCmsBuffer = signedCms.Encode();
signedCms.Decode(signedCmsBuffer);
//проверка подписи
signedCms.CheckSignature(false);
return signedCmsBuffer;
}
}

На моменте signedCms.ComputeSignature(cmsSigner); происходит ошибка.

Цитата:
System.Security.Cryptography.CryptographicException: Could not determine signature algorithm for the signer certificate.
at System.Security.Cryptography.Pkcs.CmsSigner.Sign(ReadOnlyMemory`1 data, String contentTypeOid, Boolean silent, X509Certificate2Collection& chainCerts)
at System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(CmsSigner signer, Boolean silent)
at System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(CmsSigner signer)
at Gz.Invest.CryptoSigner.Services.CryptoService.SignFile(Stream document, CancellationToken cancellationToken) in C:\Uniteller\crypto-signer\src\Gz.Invest.CryptoSigner.Services\CryptoService.cs:line 48


Подскажите пожалуйста, я что-то не до "включил" или ошибка в самом сертификате?
Возможно нужно что-то ещё, кроме "LibCore.Initializer.Initialize(LibCore.Initializer.DetouredAssembly.Pkcs);"
Offline Артём Макаров  
#2 Оставлено : 3 августа 2023 г. 17:46:59(UTC)
Артём Макаров

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Добрый день.

Судя по стеку как будто вообще не подтягиваются исправляется из LibCore.

Можно проверить
- что в качестве целевого рантайма в csproj указан net6.0
- что инициализация точно вызывается однократно до вызова проблемного кода
- сертификат имеет привязку к закрытому ключу

Какой алгоритм ключа сертификата используется?

Отредактировано пользователем 3 августа 2023 г. 17:47:45(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.