12.04.2005 13:42:15eToken и флаг CRYPT_SILENT Ответов: 6
Роман Харитонов
Подскажите, что не верно.
На машине установлено:
1. Windows XP Professional
2. CryptoPro CSP 2.0
3. eToken SDK 3.50
4. eToken для КриптоПро 2.0 (2.0.0.50)

Действия:
На токене eToken R2 создается контейнер (через штатные средства Microsoft Certification Authority)

С помощью продукта CryptoPro CSP 2.0 контейнер видится, копируется.
Его же имя возвращается в списке имен доступных контейнеров и через API.

Но при вызове функции CPAcquireContext
с именем этого контейнера и флагом CRYPT_SILENT возвращается ошибка NTE_BAD_KEYSET_PARAM

если флаг CRYPT_SILENT не указывать все проходит нормально

если контейнер расположен не на токене все проходит нормально как с флажком так и без него.

Возможно это флаг не поддерживается для выше указанной конфигурации ?
 
Ответы:
13.04.2005 11:20:03Василий
Для того, чтобы использовать флаг CRYPT_SILENT при работе с контейнером, необходимо:
- либо отсутствие пароля(ПИН-кода) для доступа к контейнеру, либо его программное задание ф-ей CryptSetProvParam (..PP_KEYEXCHANGE_PIN или PP_SIGNATURE_PIN..), либо нажатие "Запомнить пароль" при предыдущем обращении к контейнеру без флажка CRYPT_SILENT
- использование уникального имени контейнера (с указанием носителя)
- (при генерации ключевых пар) - наличие аппаратного ДСЧ
См. http://www.cryptopro.ru/CryptoPro/test/csp_2_0.chm
13.04.2005 19:19:09Роман Харитонов
Наверно я немного не корректно задал вопрос.
Я вызываю функцию:
CPAcquireContext(&hProv,"SCARD\ETOKEN_R2_00018228\CC01\2C11",CRYPT_SILENT);
функция возвращает FALSE; GetLastError() возвращает NTE_BAD_KEYSET_PARAM
когда же я вызываю:
CPAcquireContext(&hProv,"SCARD\ETOKEN_R2_00018228\CC01\2C11",0);
функция возвращает TRUE !!!
Дальше я действительно вызываю
CPSetProvParam(..PP_KEYEXCHANGE_PIN или PP_SIGNATURE_PIN..); но только в том случае если CPAcquireContext
завершилась успехом.
Возможно, мне лучше перейти на Windows Crypto API интерфейс (CryptAcquireContext,CryptSetProvParam)???
15.04.2005 11:45:42Василий
Попробуйте для более новых версий ПО для работы с етокеном:
RTE 3.60.116
eToken для КриптоПро CSP 2.0.0.62
они доступны на сайте производителя: http://www.aladdin.ru/downloads/
29.09.2005 14:26:23Роман Харитонов
прошу прощения за перерыв,
но предложенное решение не помогает,
ситуация воспроизводится и на новых версиях

29.09.2005 14:58:57Роман Харитонов
Маленькое дополнение:
Ошибка возникает только в том случае когда в CryptoPro CSP зарегистрированы оба AKS носителя
AKS ifdh 0
AKS ifdh 1

возможно имя контейнера нужно дополнять именем носителя ?
потому как именно окно "выбора носителя" мелькает при вызове функции
CPAcquireContext(&hProv,"SCARD\ETOKEN_R2_00018228\CC01\2C11",0);
а при вызове
CPAcquireContext(&hProv,"SCARD\ETOKEN_R2_00018228\CC01\2C11",CRYPT_SILENT);
система не может уточнить какой именно носитель имеется в виду.
30.09.2005 0:17:17maxdm
Да, Вы правильно все поняли. В silent нужно конкретно указывать имя считывателя, или он должен быть один, или должен быть дефолтный (в 3.0)