17.01.2007 12:42:46CertOpenStore & eToken Ответов: 9
Buchos
Прошу прощения, если обсуждалось, но возможно ли с помощью функций CertOpenStore и CertEnumCertificatesInStore прочитать сертификаты прямо с eToken R2? Ели да, то с какими параметрами вызывать CertOpenStore?
 
Ответы:
17.01.2007 14:11:09Kirill Sobolev
А разве eToken реализует функциональность хранилища сертификатов? Это же ключевой носитель, на котором хранят контейнеры, в которых могут быть (а могут и не быть) сертификаты. Поэтому, CertOpenStore тут не подойдет, если, конечно, нет специального ПО которое при подключении еTokena создает временное хранилище куда помещает все сертификаты с eTokena.
17.01.2007 15:34:27Buchos
Т.е. скредствами Crypto API сертификат с eToken R2 не прочитать?
17.01.2007 16:57:52Kirill Sobolev
Как раз можно - сначала перечислить контейнеры, которые лежат на eTokene а потом оттуда вытащить сертификаты.
17.01.2007 17:14:23Buchos
Если Вас не задруднит... можно подробней?
17.01.2007 17:48:54Kirill Sobolev
Вот тут похожее обсуждалось
http://www.cryptopro.ru/cryptopro/forum/view.asp?q=2456
18.01.2007 13:22:47Buchos
К сожалению, не подходит. Вопрос все еще открыт. Требуется аналог того, что происходит при нажатии кнопки "Посмотреть сертификаты в контейнере..."
18.01.2007 13:50:38Kirill Sobolev
Если Вы про панель управления КриптоПро CSP то там это и происходит - перечисление всех контейнеров для выбранного провайдера а потом уже просмотр сертификата для выбранного контейнера.
18.01.2007 14:26:58Buchos
Kirill Sobolev, я Вам очень признателен за Ваши комментарии.

Да, так и делаю:

HCRYPTPROV hсProv;
containerName - строка - имя ключевого контейнера

вызываю CryptAcquireContext(&hсProv, containerName, NULL, 75, 0)

что указывать параметрам CertOpenStore()? ясно, что hCryptProv будет указателем на полученный hсProv?

PCCERT_CONTEXT certContext = NULL;
while ((certContext = CertEnumCertificatesInStore(hCertStore, certContext)) != NULL) {
...
}

что бы я ни пробовал подставлять в CertOpenStore(), certContext всегда NULL
18.01.2007 15:10:58Kirill Sobolev
Вам не надо открывать контейнер как хранилище, а надо получить свойство ключа CryptGetKeyParam(KP_CERTIFICATE)