logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Пономаренко  
#1 Оставлено : 12 июля 2019 г. 11:09:16(UTC)
Евгений Пономаренко

Статус: Активный участник

Группы: Участники
Зарегистрирован: 03.05.2012(UTC)
Сообщений: 163
Откуда: Екатеринбург

Сказал(а) «Спасибо»: 45 раз
Поблагодарили: 23 раз в 19 постах
Добрый день.
Проблема следующая.
Есть код, выполняющийся на сервере, обращается к контейнеру Криптопро, на токене или в регистри-на результат не влияет
там присутствует вызов CertSetCertificateContextProperty(CERT_KEY_PROV_INFO_PROP_ID)
Все прекрасно работает в среде .Net framework 4.6 (4.7 тоже проверено)
Портировали код на .Net Core 2. все прекрасно работает до некоторых пор, затем с носителя бесследно исчезает ключевой контейнер.
Проблема была локализована - вызов этой функции, ориентировочно на 900-й раз. Происходит удаление контейнера с носителя.
Написан код (в аттаче), который 100% воспроизводит проблему как на серверных платформах, так и на 7/8/10.
Проверено на CSP 4.0 R3,R4
Просьба по возможности помочь разобраться, что мы делаем не так.
csp-error-projects.zip (8kb) загружен 7 раз(а).
Offline Максим Коллегин  
#2 Оставлено : 15 июля 2019 г. 12:52:44(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,581
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Постараемся разобраться.
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#3 Оставлено : 15 июля 2019 г. 13:03:04(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,581
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Попробовал 5.0 R0 и 4.0 R4 на Windows 10 - не воспроизводится.
Какие еще криптографические приложения установлены?

Отредактировано пользователем 15 июля 2019 г. 13:03:36(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#4 Оставлено : 15 июля 2019 г. 13:05:53(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,581
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Поторопился, на 1856 итерации исчез.

Отредактировано пользователем 15 июля 2019 г. 13:06:38(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#5 Оставлено : 15 июля 2019 г. 13:26:54(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,581
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Это проделки .NET Core:
https://github.com/dotne...ws/Native/SafeHandles.cs
Код:

    internal sealed class SafeCertContextHandleWithKeyContainerDeletion : SafeCertContextHandle
    {
        protected sealed override bool ReleaseHandle()
        {
            using (SafeCertContextHandle certContext = Interop.crypt32.CertDuplicateCertificateContext(handle))
            {
                DeleteKeyContainer(certContext);
            }
            base.ReleaseHandle();
            return true;
        }

Отредактировано пользователем 15 июля 2019 г. 13:30:39(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#6 Оставлено : 15 июля 2019 г. 13:40:02(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,581
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
К этому вызову приводит уродливый конструктор
Код:
  public X509Certificate(byte[] data)
        {
            if (data != null && data.Length != 0)
            {
                // For compat reasons, this constructor treats passing a null or empty data set as the same as calling the nullary constructor.
                using (var safePasswordHandle = new SafePasswordHandle((string)null))
                {
                    Pal = CertificatePal.FromBlob(data, safePasswordHandle, X509KeyStorageFlags.DefaultKeySet);
                }
            }
        }
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#7 Оставлено : 15 июля 2019 г. 13:44:23(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,581
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
Проблему можно обойти, вызвав конструктор вот так:
Код:
var certificate = new X509Certificate2(certResult, new System.Security.SecureString(), X509KeyStorageFlags.PersistKeySet);

Отредактировано пользователем 15 июля 2019 г. 13:44:59(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Евгений Пономаренко оставлено 24.07.2019(UTC)
Offline cross  
#8 Оставлено : 16 июля 2019 г. 10:58:42(UTC)
cross

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 908
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 144 раз в 133 постах
Еще можно посмотреть на наш форк CoreFx c поддержкой ГОСТ уже на уровне .NET кода. https://github.com/CryptoProLLC/corefx
Анатолий Беляев (cross на cryptopro.ru)
Offline Евгений Пономаренко  
#9 Оставлено : 24 июля 2019 г. 7:36:00(UTC)
Евгений Пономаренко

Статус: Активный участник

Группы: Участники
Зарегистрирован: 03.05.2012(UTC)
Сообщений: 163
Откуда: Екатеринбург

Сказал(а) «Спасибо»: 45 раз
Поблагодарили: 23 раз в 19 постах
Автор: Максим Коллегин Перейти к цитате
Проблему можно обойти, вызвав конструктор вот так:
Код:
var certificate = new X509Certificate2(certResult, new System.Security.SecureString(), X509KeyStorageFlags.PersistKeySet);


Спасибо! Сохраним в нашу базу знаний :)
Offline golinski  
#10 Оставлено : 1 августа 2019 г. 17:40:11(UTC)
golinski

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: cross Перейти к цитате
Еще можно посмотреть на наш форк CoreFx c поддержкой ГОСТ уже на уровне .NET кода. https://github.com/CryptoProLLC/corefx

у вас случайно нет какой-то хотя бы минимальной инфы как поднять ваш форк чтобы потестировать?
Offline cross  
#11 Оставлено : 2 августа 2019 г. 15:05:46(UTC)
cross

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 908
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 144 раз в 133 постах
Пока только через сборку у вас на машине.
1. Собираете форк согласно инструкции указанной на github
2. Узнаете версию пакета которую он выставил у вас при сборке - (лежит по пути ./artifacts/packages/Debug/runtime.osx-x64.Microsoft.Private.CoreFx.NETCoreApp.4.6.0-dev.19372.1.nupkg )
3. в proj файле пишите (путь к рантайму согласно вашей платформе)
Цитата:

<Project Sdk="Microsoft.NET.Sdk">

<ItemGroup>
<PackageReference Include="Microsoft.Private.CoreFx.NETCoreApp" Version="4.6.0-dev.19372.1" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<PackageConflictPreferredPackages>
Microsoft.Private.CoreFx.NETCoreApp;runtime.osx-x64.Microsoft.Private.CoreFx.NETCoreApp;$(PackageConflictPreferredPackages)
</PackageConflictPreferredPackages>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RuntimeFrameworkVersion>3.0.0-preview5-27626-15</RuntimeFrameworkVersion>
<RuntimeIdentifier>osx-x64</RuntimeIdentifier> <!-- make self-contained -->
</PropertyGroup>
</Project>


4. Если хотите использовать PKCS то нужно включить штатный пакет от nuget и скопировать ему в кеш вместо его либы ту что собралась у вас
Цитата:
cp ./artifacts/bin/runtime/netcoreapp-OSX-Debug-x64/System.Security.Cryptography.Pkcs.dll /Users/cross/.nuget/packages/system.security.cryptography.pkcs/4.6.0-preview6.19303.8/lib/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll


5. После этого dotnet restore, dotnet build.
Анатолий Беляев (cross на cryptopro.ru)
thanks 1 пользователь поблагодарил cross за этот пост.
golinski оставлено 02.08.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.