Статус: Новичок
Группы: Участники
Зарегистрирован: 21.08.2020(UTC) Сообщений: 8 Сказал(а) «Спасибо»: 3 раз
|
Выдает тот же Exception. А какие требования к клиентской машине? Использутеся CP CSP 5.0.11455 КС1. Netcore runtime 3.1.21.30622. Нужно переставлять на 3.1.4? Debug/Release сборка не могут повлиять? С сертификатом в хранилище пользователя, все работает. С компьютерным хранилищем проблема, получается: Код:cspParams = handle.GetProvParameters();
которое вызывает Advapi32.CryptGetProvParam. В ms docsпишут: Цитата:Important This API is deprecated. New and existing software should start using Cryptography Next Generation APIs. Microsoft may remove this API in future releases. Спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: LFrolov Выдает тот же Exception. А какие требования к клиентской машине? Использутеся CP CSP 5.0.11455 КС1. Netcore runtime 3.1.21.30622. Нужно переставлять на 3.1.4? Debug/Release сборка не могут повлиять? С сертификатом в хранилище пользователя, все работает. С компьютерным хранилищем проблема, получается: Код:cspParams = handle.GetProvParameters();
которое вызывает Advapi32.CryptGetProvParam. В ms docsпишут: Цитата:Important This API is deprecated. New and existing software should start using Cryptography Next Generation APIs. Microsoft may remove this API in future releases. Спасибо. Версию CSP лучше использовать 5.0.11823 и старше, хотя для Windows это менее принципиально. Требования по SDK описаны в тестовом проекте https://github.com/Crypt...b/master/docs/Windows.mdЕсли проект собирается, в нём используются классы Gost в main, и он не падает в начале запуска с ошибкой вида "не удаётся найти тип" - дело не в SDK. Debug/Release не должно влиять. Ошибка воспроизводится только на конкретном сертификате, или на всех сертификатах из хранилища компьютера? Можете поставить новый (например самоподписанный) сертификат из pfx в хранилище компьютера, выдать права на закрытый ключ и попробовать с ним? |
|
1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2021(UTC) Сообщений: 24
|
Добрый день! Оба вопроса связаны с CoreFx. Сделаю их отдельными постами. Первый вопрос.Я успешно запустил проект https://github.com/Crypt...DotnetCoreSampleProject, сделав всё по инструкции. Код выполнился. Показал, что свои же данные подписал. Теперь я пытаюсь этот проект создать по-другому. Создаю простое консольное приложение на .Net Core 3.1 Добавляю к нему обе необходимые .dll и устанавливаю тот же NetCoreApp проект. Вот весь текст файла .cproj: Код:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Private.CoreFx.NETCoreApp" Version="4.7.0-dev.21370.1" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Security.Cryptography.Pkcs">
<HintPath>E:\Development\C#.Net\Projects Work\CryptoProCoreFx\RunTimeLibs\System.Security.Cryptography.Pkcs.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Xml">
<HintPath>E:\Development\C#.Net\Projects Work\CryptoProCoreFx\RunTimeLibs\System.Security.Cryptography.Xml.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
И дальше полностью копирую код класса Program из DotNetSampleProject. При запуске сразу же выдаётся ошибка: Цитата:System.TypeLoadException: 'Could not load type 'System.Security.Cryptography.Gost3410_2012_256CryptoServiceProvider' from assembly 'System.Security.Cryptography.Csp, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.' Куда копать? Я читал в этой теме про замененные .Net Standard библиотеки, но я не вижу каким образом файлы проекта отличаются. Для справки, файл проекта DotNetSampleProject: Код:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeFrameworkVersion>3.1.3</RuntimeFrameworkVersion>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<!--<RuntimeIdentifier>linux-x64</RuntimeIdentifier>-->
<!-- make self-contained -->
<PackageConflictPreferredPackages>Microsoft.Private.CoreFx.NETCoreApp;runtime.win-x64.Microsoft.Private.CoreFx.NETCoreApp;runtime.linux-x64.Microsoft.Private.CoreFx.NETCoreApp;$(PackageConflictPreferredPackages)</PackageConflictPreferredPackages>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Private.CoreFx.NETCoreApp" Version="4.7.0-dev.20465.1" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Security.Cryptography.Pkcs">
<HintPath>E:\Development\C#.Net\Projects Work\CryptoProCoreFx\RunTimeLibs\System.Security.Cryptography.Pkcs.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Xml">
<HintPath>E:\Development\C#.Net\Projects Work\CryptoProCoreFx\RunTimeLibs\System.Security.Cryptography.Xml.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2021(UTC) Сообщений: 24
|
Второй вопрос.Он связан с подписями. У меня есть файлы, которые были подписаны утилитой cryptcp при помощи команды: Цитата:cryptcp.x64.exe -signf -f "Шудро_СТК_2022.04.08_(омнис).cer" "Doc_MsgId_13054510_SignedByCryptoPro_CertIncluded" Проверочная команда Цитата:cryptcp.x64.exe -vsignf -f "Шудро_СТК_2022.04.08_(омнис).cer" "Doc_MsgId_13054510_SignedByCryptoPro_CertIncluded" Показывает верификацию. Более того, у меня есть подпись этого же файла, созданная при помощи библиотеки Диадока (их реализация документооборота на .Net). И она тоже проходит проверку утилитой. А вот DontNetSampleProject напрочь отвергает обе подписи. Проверка производится этим кодом: Код:var dir = @"C:\Temp\SignedDocuments";
var file = File.ReadAllBytes(Path.Combine(dir, "Doc_MsgId_13054510_SignedByDiadoc.pdf"));
var sign = File.ReadAllBytes(Path.Combine(dir, "Doc_MsgId_13054510_SignedByDiadoc.pdf.sgn"));
var cert = new X509Certificate2(Path.Combine(dir, "Шудро_СТК_2022.04.08_(омнис).cer"));
var certGostPk = cert.GetGost3410_2012_256PublicKey();
var result = certGostPk.VerifyData(file, sign, HashAlgorithmName.Gost3411_2012_256);
В чем может быть проблема?
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: ZiCold В чем может быть проблема? Скорее всего либо не тот формат подписи (то есть надо проверять другой функцией семейства Verify) либо не тот объект (тут лучше всего отталкиваться от рабочих примеров) либо в подписи нет сертификата (судя по CertIncluded, он все же есть).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 216
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 62 раз в 58 постах
|
Автор: ZiCold Второй вопрос.
В чем может быть проблема? Скорее всего у вас Cms подпись. Смотрите в сторону класса SignedCms. Цитата:не вижу каким образом файлы проекта отличаются Отличаются ровно в строчках с 5 по 9 (строки csproj DotNetSampleProject). В вашем проекте, как видно, эти строки отсутствуют. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2021(UTC) Сообщений: 24
|
Автор: Артём Макаров Скорее всего у вас Cms подпись. Смотрите в сторону класса SignedCms.
Использовал класс signedCms и всё отработало верно. Автор: Артём Макаров Отличаются ровно в строчках с 5 по 9 (строки csproj DotNetSampleProject). В вашем проекте, как видно, эти строки отсутствуют.
Действительно, сплоховал я. Нужно было указать проекту на Runtime версии. Код:<RuntimeFrameworkVersion>3.1.3</RuntimeFrameworkVersion>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
Огромное спасибо за ответы!
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2021(UTC) Сообщений: 24
|
Добрый день! Планируется ли переход библиотеки на .Net 5 (или 6 уже)? Ситуация. Использую функцию Код:ContentInfo contentInfo = new ContentInfo(msg);
SignedCms signedCms = new SignedCms(contentInfo, true);
signedCms.CheckSignature(true);
Если использовать библиотеку на .Net 3.1 и запускать её через консольное приложение также 3.1, то всё в порядке. Если использовать ту же библиотеку, но запускать её с .Net 5, то выдаётся ошибка "signedCms.CheckSignature(true);"
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,391 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 715 раз в 620 постах
|
Добрый день. Планируем поддержать .NET 6 |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.09.2021(UTC) Сообщений: 24
|
Добрый день! Возникла ошибка при попытке запустить приложение WebApi с CoreFx на сервере. Код: System.MissingMethodException: Method not found: 'System.Security.Cryptography.HashAlgorithmName System.Security.Cryptography.HashAlgorithmName.get_Gost3411_2012_256()'.\r\n
at Internal.Cryptography.PkcsHelpers.GetDigestAlgorithm(String oidValue, Boolean forVerification)\r\n at System.Security.Cryptography.Pkcs.SignerInfo.GetDigestAlgorithm() in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignerInfo.cs:line 737\r\n
at System.Security.Cryptography.Pkcs.SignerInfo.PrepareDigest(Boolean compatMode) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignerInfo.cs:line 510\r\n
at System.Security.Cryptography.Pkcs.SignerInfo.VerifySignature(CmsSignature signatureProcessor, X509Certificate2 certificate, Boolean compatMode) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignerInfo.cs:line 698\r\n
at System.Security.Cryptography.Pkcs.SignerInfo.Verify(X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignerInfo.cs:line 647\r\n
at System.Security.Cryptography.Pkcs.SignerInfo.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignerInfo.cs:line 415\r\n
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignatures(SignerInfoCollection signers, X509Certificate2Collection extraStore, Boolean verifySignatureOnly) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignedCms.cs:line 595\r\n
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignedCms.cs:line 578\r\n
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(Boolean verifySignatureOnly) in C:\\projects\\corefx\\src\\System.Security.Cryptography.Pkcs\\src\\System\\Security\\Cryptography\\Pkcs\\SignedCms.cs:line 569\r\n
Сам проект WebApi собирал согласно инструкции CoreFX инструкции. Всё на локальное машине работает. На сервере устанавливал SDK и Hosting пакеты - не помогло. Даже полностью вычищал все установленные версии Net Core. Что еще можно сделать?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close