| ||||
| ||||
Подскажите, что не верно. На машине установлено: 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 не указывать все проходит нормально если контейнер расположен не на токене все проходит нормально как с флажком так и без него. Возможно это флаг не поддерживается для выше указанной конфигурации ? | ||||
Ответы: | ||||
| ||||
Для того, чтобы использовать флаг CRYPT_SILENT при работе с контейнером, необходимо: - либо отсутствие пароля(ПИН-кода) для доступа к контейнеру, либо его программное задание ф-ей CryptSetProvParam (..PP_KEYEXCHANGE_PIN или PP_SIGNATURE_PIN..), либо нажатие "Запомнить пароль" при предыдущем обращении к контейнеру без флажка CRYPT_SILENT - использование уникального имени контейнера (с указанием носителя) - (при генерации ключевых пар) - наличие аппаратного ДСЧ См. http://www.cryptopro.ru/CryptoPro/test/csp_2_0.chm | ||||
| ||||
Наверно я немного не корректно задал вопрос. Я вызываю функцию: 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)??? | ||||
| ||||
Попробуйте для более новых версий ПО для работы с етокеном: RTE 3.60.116 eToken для КриптоПро CSP 2.0.0.62 они доступны на сайте производителя: http://www.aladdin.ru/downloads/ | ||||
| ||||
прошу прощения за перерыв, но предложенное решение не помогает, ситуация воспроизводится и на новых версиях | ||||
| ||||
Маленькое дополнение: Ошибка возникает только в том случае когда в 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); система не может уточнить какой именно носитель имеется в виду. | ||||
| ||||
Да, Вы правильно все поняли. В silent нужно конкретно указывать имя считывателя, или он должен быть один, или должен быть дефолтный (в 3.0) | ||||