Статус: Новичок
Группы: Участники
Зарегистрирован: 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);"
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 217
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 63 раз в 59 постах
|
Добрый день. Судя по стеку как будто вообще не подтягиваются исправляется из LibCore. Можно проверить - что в качестве целевого рантайма в csproj указан net6.0 - что инициализация точно вызывается однократно до вызова проблемного кода - сертификат имеет привязку к закрытому ключу Какой алгоритм ключа сертификата используется? Отредактировано пользователем 3 августа 2023 г. 17:47:45(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close