| ||||
| ||||
Есть библиотека на С#, которая инкапсулирует в себе работу с CryptoPro. Данную библиотеку задействовал из WebService развернутый из под IIS 6.0 (ос Windows 2003 Server). Создал новую учетную запись ААА. Сервис запускаю от имени пользователя ААА. Установил сертификат в личное хранилище пользователя ААА. Возникла следующая проблема. После перезагрузки системы, при обращении к WebService'у получаю ошибку "Не найден сертификат", но после входа в систему от имени пользователя ААА, сертификат находится и все работает. Если выйти из системы пользователем AAA, проблема повторится спустя некоторое время. Как можно решить проблему? Заранее спасибо. | ||||
Ответы: | ||||
| ||||
Обычно, если делается веб-сервис, он работает с сертификатом (и ключевым контейнером) LOCAL MACHINE, а не пользовательскими. | ||||
| ||||
Если я не ошибаюсь в этом случае необходимо учетной записи, от которой запускается сервис давать админские права. Иначе сервис не сможет обратится к локальному хранилищу. Чего делать не хочется. | ||||
| ||||
Вопрос. Запустите от имени этого аккаунта приложение (или сервис), в котором будет вызов csptest.exe (имеется в папке установки CSP 3.0, т.е. \Program Files\Crypto Pro\CSP) с параметрами: csptest -keyset -check -container имя_контейнера сможет он его прочитать? | ||||
| ||||
День добрый. Реализовал вызов из сервиса программы csptest. Вот выходная информация: SP (Type:71) v3.0.3293 KC1 Release OS:Windows CPU:IA32 FastCode:READY,ENABLED. CSP (Type:75) v3.0.3293 KC1 Release OS:Windows CPU:IA32 FastCode:READY,ENABLED. CryptAcquireContext succeeded.HCRYPTPROV: 1354376 CryptGetProvParam succeeded. Provider name: Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider A crypto context has been acquired and The name on the key container is "test11" No signature key is available. An exchange key exists. HCRYPTKEY: 0x14eb68 Check key passed. Everything is OK. A an exchange key exist in the "test11" key container. Total: SYS: 0.070 sec USR: 0.130 sec UTC: 0.230 sec [ErrorCode: 0x00000000] | ||||
| ||||
Значит, с контейнером (и с правами доступа к нему) всё в порядке. Вероятно, есть особенности при получении именно сертификата, а не контейнера. Для теста сделайте сертификат с алгоритмом RSA (на Microsoft CSP) и посмотрите, как будет себя вести. | ||||
| ||||
Добрый день. Попробовал с другим сертификатом - ситуация не изменилась. Попрежнему не находит сертификат. | ||||
| ||||
Кажется начал понимать откуда ноги растут. Сделал следующее. Написал консольное приложение, которое выполняет обращение обращение к библиотеке (билиотека инкапсулирует работу с CryptoPro). В приложениеи перед вызовом метода подписка осуществляю имерсонализацию на пользователя AAA (для пользователя ААА установлен сертификат в локальное хранилище). Если посмотреть в EventViewer.Security, то можно видеть как logon'интся пользователь AAA. Но библиотека возвращает ошибку - сертификат не найден. Далее руками logon'имся пользователем AAA, запускаем консольное приложение - Все ок. Далее запускаем консольное приложение, но не выполняем обратную смену пользователя после персонализации а преостанавливаем выполнение и осуществляет logoff пользователя AAA из системы. Смотрим в EventLog и видим следующее предупреждение: Windows cannot unload your classes registry file - it is still in use by other applications or services. The file will be unloaded when it is no longer in use. Отсюда вывод: Персонализация на пользователя AAA не осуществляет загрузку в реестр необходимых данных. Т.к сертификат установлен на считыватель 'Реестр' в локальное хранилище пользователя AAA. То он не доступен, т.к не загружен в реестр. Раз при запуске Web-сервиса от имени локальной учетной записи происходит именно имперсонализация, то все вышесказонное относится и к исходной проблеме с доступом к сертификату из WebServic'а. Немного сумбурно получилось. | ||||
| ||||
Может, всё-таки проще использовать хранилище компьютера, а не пользователя? Админом для этого быть не обязательно - дайте права (пользователю AAA) на чтение на раздел (и подразделы)HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates и на чтение-запись на раздел и подразделы HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Keys (если ключевой контейнер будет в реестре) | ||||