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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline AVerhola  
#1 Оставлено : 21 апреля 2015 г. 14:03:27(UTC)
AVerhola

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

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

Доброго времени суток.
Перейду сразу к делу.
На машине установлен КриптоПро .Net 1.0.4863.0 с КриптоПро CSP 3.6.7777. Все отлично работало и всех устраивало до тех пор, пока не появилась необходимость запустить на этой же машине приложение, которое поддерживает работу с плагинами, которые, для безопасности исполнения, запускаются в отдельных AppDomain'ах с ограниченным набором прав. Проблема в том, что при выполнении чего-то в роде:

var path = AppDomain.CurrentDomain.BaseDirectory + "\\Plugins";
var domainSetup = new AppDomainSetup();
domainSetup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
domainSetup.PrivateBinPath = "plugins;bin";
var permmisions = new PermissionSet(PermissionState.None);
permmisions.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
permmisions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
permmisions.AddPermission(new UIPermission(UIPermissionWindow.AllWindows));
permmisions.AddPermission(new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read, path));
var newAppDomain = AppDomain.CreateDomain("XYZ", null, domainSetup, permmisions);

мы получаем ошибку:
System.Security.SecurityException: Сбой при запросе.
в System.RuntimeMethodHandle.PerformSecurityCheck(Object obj, RuntimeMethodHandleInternal method, RuntimeType parent, UInt32 invocationFlags)
в System.RuntimeMethodHandle.PerformSecurityCheck(Object obj, IRuntimeMethodInfo method, RuntimeType parent, UInt32 invocationFlags)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в CryptoPro.Sharpei.NetDetours.DomainNeutralDet.TracedInvoke(MethodInfo mi, Object obj, Object[] parameters)
в CryptoPro.Sharpei.NetDetours.DomainNeutralDet.MakeOne(Type targetType, DetourDescription item, AssemblyName assemblyName)
в CryptoPro.Sharpei.NetDetours.DomainNeutralDet.MakeOneAssembly(DetourDescription item, AssemblyName assemblyName)
в CryptoPro.Sharpei.NetDetours.DomainNeutralDet.DetourAssembly(DetDescriptionList allGroups, Assembly toDet)
в CryptoPro.Sharpei.NetDetours.CrossDomainList.InitOnNewDomainPolicyNeutralCreateDomain()
в System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
в CryptoPro.Sharpei.NetDetours.CrossDomainList.CreateDomain(AppDomain newDomain)
в CryptoPro.Sharpei.NetDetours.CPAppDomain.CreateDomain(String friendlyName, Evidence securityInfo, AppDomainSetup info)
строка "var newAppDomain = AppDomain.CreateDomain("XYZ", null, domainSetup, permmisions);"

Ошибкой завершилось следующее действие:
Demand
Ошибкой завершилось первое разрешение следующего типа:
System.Security.PermissionSet
Было предъявлено следующее требование:
<PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>

Для сбойной сборки был предоставлен следующий набор:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Read="[Значение path]"
PathDiscovery="[Значение path]"/>
<IPermission class="System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="MemberAccess"/>
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Execution"/>
<IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Window="AllWindows"/>
</PermissionSet>

Ошибкой завершилась следующая сборка или AppDomain:
CryptoPro.Sharpei.CorLib, Version=1.4.0.11, Culture=neutral, PublicKeyToken=473b8c5086e795f5
Ошибкой завершилась сборка со следующим параметром Zone:
MyComputer
Ошибкой завершилась сборка со следующим параметром URL:
file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/CryptoPro.Sharpei.CorLib/v4.0_1.4.0.11__473b8c5086e795f5/CryptoPro.Sharpei.CorLib.dll

Судя по всему, при создании домена в нем начала орудовать сборка "CryptoPro.Sharpei.CorLib", ей не хватило прав и она потянула за собой все остальное. Очень неприятная ситуация.
Точно такая же ошибка возникает на машине, где были установлены КриптоПро .Net 1.0.5210.0 и КриптоПро CSP 3.9.8212.
В случае с последней версией КриптоПро .Net 1.0.5425.0 и КриптоПро CSP 3.9.8212 суть ошибки оставалась той же, только ругань была уже не на "CryptoPro.Sharpei.CorLib.dll", а на "mscorlib".
Данный код выполняется без ошибок на машинах без КриптоПро .Net и КриптоПро CSP. Используется .Net 4.5.

Хотелось бы узнать, можно ли как-то решить/обойти данную проблему? Не хочется вставать перед выбором КриптоПро .Net или использование AppDomain'ов на той или иной машине.
Offline Максим Коллегин  
#2 Оставлено : 21 апреля 2015 г. 14:08:05(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 737 раз в 634 постах
проблема известная, но неприоритетная. Можно отключить исправления для конкретного процесса через CProExclude.
Знания в базе знаний, поддержка в центре поддержки
Offline AVerhola  
#3 Оставлено : 21 апреля 2015 г. 17:06:40(UTC)
AVerhola

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

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

Попробовал использовать CProExclude. Не помогло или я что-то делал неправильно.
Пошагово:
1) В реестре в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CProExclude
создал раздел с наименованием [Имя приложения], где создал строковый параметр FileName со значением [Имя приложения].exe
2) Перезагрузил компьютер.
3) Запустил тоже приложение и получил туже ошибку.

Судя по предыдущим темам на форуме, порядок действий должен был быть таким. Я что-то пропустил или сделал не так?
Offline Максим Коллегин  
#4 Оставлено : 21 апреля 2015 г. 18:47:18(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 737 раз в 634 постах
Все верно, имя приложение латиницей в формате 8.3?
Знания в базе знаний, поддержка в центре поддержки
Offline AVerhola  
#5 Оставлено : 22 апреля 2015 г. 9:19:56(UTC)
AVerhola

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

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

Имя приложения латиницей, но трехэтажное. Переименовал, проверил - запустилось.
Хотел бы тогда уточнить еще один вопрос - приложения в списке CProExclude смогут работать с сертификатами (подписывать xml-сообщения, файлы при помощи библиотек КриптоПро .Net) или таким образом они лишаются этой возможности?
Offline Максим Коллегин  
#6 Оставлено : 22 апреля 2015 г. 11:43:36(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 737 раз в 634 постах
конечно же лишаются.
Знания в базе знаний, поддержка в центре поддержки
Offline AVerhola  
#7 Оставлено : 22 апреля 2015 г. 11:55:52(UTC)
AVerhola

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

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

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