29.09.2003 15:45:11::CryptAcquireContext() ошибка 0x8009001A Ответов: 6
Maxim Egorushkin
Ситуация:
Пользователь с правами админа создает машинный кейсет и ключ обмена (CRYPT_MACHINE_KEYSET). Другой пользователь с правами админа пытается открыть этот кейсет и получить ключ. Вызов ::CryptAcquireContext() заканчивается с ошибкой. ::GetLastError() возвращает 0x8009001A : "Неправильный зарегистрированный набор ключей." Как это понимать? Как получить "правильный" набор ключей?
 
Ответы:
29.09.2003 19:26:12Василий
Будьте добры - в двух словах
- версия (билд) CSP
- версия ОС
- с каким флагом вызывает второй пользователь
- используется ли "Служба хранения ключей"
30.09.2003 13:20:06Maxim Egorushkin
- КриптоПро CSP 1.1 (Build 139)
- Windows XP Prof SP1
- Не используется, ключи хранятся в памяти приложений

Создается контейнер так (обработка ошибок опущена):

Пользователь Alice (админ):

HCRYPTPROV prov;
::CryptAcquireContext(&prov, “keyset”, CP_DEF_PROV, CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET);
HCRYPTKEY key;
::CryptGenKey(prov, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &key);
// все ок, закрывает хэндлы

Пользователь Bob (админ):

HCRYPTPROV prov;
::CryptAcquireContext(&prov, “keyset”, CP_DEF_PROV, CRYPT_SILENT | CRYPT_MACHINE_KEYSET); // облом

И еще вопрос.
Если я создам CRYPT_MACHINE_KEYSET и явно разрешу доступ к нему другому пользователю-не-админу прочитав, изменив и установив DACL кейсета при помощи CryptSetProvParam(…,PP_KEYSET_SEC_DESCR, …), то сможет ли этот пользователь-не-админ открыть этот кейсет? MSDN говорит, что это возможно для MS провайдеров. Возможно ли это для КриптоПро?

30.09.2003 14:06:30Василий
Я проверю приведённый пример.

На вопрос о DACL - если правильно поменять, то да. Там не только права на сам контейнер, но и на разделы реестра, содержащие его - начиная с HKLM\Software.
30.09.2003 15:50:51Василий
Вот цитата из нашей документации по CSP 1.1:

"СКЗИ КриптоПРО CSP функционирует в следующих операционных системах
(ОС):
• Windows 95 с установленным ПО MS Internet Explorer версии 5.0 и выше;
• Windows 95 OSR2 с установленным ПО MS Internet Explorer версии 5.0 и
выше;
• Windows 98 с установленным ПО MS Internet Explorer версии 5.0 и выше;
• Windows 98 SE с установленным ПО MS Internet Explorer версии 5.0 и выше;
• Windows NT 4.0 SP5 и выше с установленным ПО MS Internet Explorer 5.0 и
выше;
• Windows ME;
• Windows 2000."

Про ХР, стало быть, речи нет.
Кое-что там может работать, а может и не работать.
В данном случае не живёт флажок CRYPT_SILENT. Если его снести, всё намного лучше...
Но в любом случае все эксперименты с ХР на Ваш страх и риск.
Используйте продукт "Крипто-Про CSP 2.0".
30.09.2003 16:03:35Maxim Egorushkin
Спасибо за важную информацию.

Флажок CRYPT_SILENT для нас крайне важен - код выполняется из под неинтерактивного сервиса, а КриптоПро кидает нам message box ("Срок действия бла-бла-бла..."). :((( Сервис открывает существующий контейнер, извлекает оттуда существующий ключ обмена.

Версия 2 вашего продукта поддерживает ли этот флажок? Не будет ли она его игнорировать и все равно кидать message box?
30.09.2003 17:01:42Василий
По поводу срока действия - окошко появляется в том случае, если до конца лицензии меньше 30 дней. От версии не зависит.
Метод лечения - либо открыть какой-нибудь контейнер без CRYPT_SILENT и нажать в окошке ок (после чего в течение этого дня такого окошка не будет), либо приобрести лицензию на необходимый срок (или неограниченную).
P.S. Срок действия лицензии отсчитывается от даты первой установки CSP на компьютер.