01.10.2007 9:31:08ошибки 0x80092004 и 0x8009001F под linux Ответов: 4
Дмитрий
Здравствуйте.

Получил тестовый сертификат. Экспортировал в файл (DER). На Linux машине (redhat) установил
(storeman -> "c" -> My -> /media/floppy/csptest.cer -> \\.\FAT12_0\csptest -> "e").
Сообщений об ошибках не было.

Все пока делаю под root-ом.

Вызов
CryptAcquireCertificatePrivateKey(pСontext, CRYPT_ACQUIRE_SILENT_FLAG, NULL, &_provider, &dwKeySpec, &bCallerFree)
приводит к ошибке 0x80092004


/usr/CPROcsp/bin/csptest -keyset -enum_containers -verifycontext -fqcn
CSP (Type:71) v3.0.3303 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED.
CSP (Type:75) v3.0.3303 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED.
CryptAcquireContext succeeded.HCRYPTPROV: 134664256
\\.\FAT12_0\csptest
OK.
Total:
[ErrorCode: 0x00000000]

/usr/CPROcsp/bin/csptest -keyset -check -container \\.\FAT12_0\csptest
CSP (Type:71) v3.0.3303 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED.
CSP (Type:75) v3.0.3303 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED.
====CryptoPro CSP====
Validity of this evaluation version of CryptoPro CSP expires in 25 days.

Что делать?

You can get license from your dealer or contact Crypto-Pro (http://www.cryptopro.ru/).
An error occurred in running the program.
../../../../mybuild/CSP/samples/csptest/ctkey.c:567:Error during CryptAcquireContext.

Error number 8009001f (-2146893793).
Program is terminating.
 
Ответы:
01.10.2007 10:15:38Василий
Для начала исправьте в строке проверки контейнера - надо имя контейнера заключить в апострофы или кавычки:

/usr/CPROcsp/bin/csptest -keyset -check -container '\\.\FAT12_0\csptest'

или

/usr/CPROcsp/bin/csptest -keyset -check -container "\\\\.\\FAT12_0\\csptest"

И такой вопрос - на контейнере есть пароль?
01.10.2007 10:29:03Дмитрий
/usr/CPROcsp/bin/csptest -keyset -check -container '\\.\FAT12_0\csptest'
CSP (Type:71) v3.0.3303 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED.
CSP (Type:75) v3.0.3303 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED.
CryptAcquireContext succeeded.HCRYPTPROV: 134664256
CryptGetProvParam succeeded.
Provider name: Crypto-Pro GOST R 34.10-2001 KC1 CSP
A crypto context has been acquired and
The name on the key container is "csptest"

No signature key is available.
An exchange key exists. HCRYPTKEY: 0x80c9370
Check key passed.
Everything is OK.
A an exchange key
exist in the "csptest" key container.
Total:
[ErrorCode: 0x00000000]

Пароля на контейнере нет.
01.10.2007 10:37:13Дмитрий
Что интересно после
/usr/CPROcsp/bin/csptest -keyset -check -container '\\.\FAT12_0\csptest'
Удалил сертификат из хранилища, установил заново и все заработало.
Но не понятно чем была вызвана ошибка.

01.10.2007 16:44:48Василий
Судя по сообщению, не была найдена ссылка на контейнер ключа или контейнер был недоступен.
Варианты:
1) при первоначальной установке сертификата не указали имя контейнера
2) в хранилище My несколько сертификатов, удовлетворяющих критерию при поиске сертификатов
3) сертификат ставили в хранилище My другого пользователя
4) контекст сертификата был получен вообще не из хранилища My
5) были проблемы с монтированием дискеты (требуется доступ на чтение-запись тому пользователю, под которым программа работает. CSP должен самостоятельно, когда требуется, монтировать дискету)