24.08.2004 14:02:59Список сертификат Ответов: 11
Dim
Здасти всем!
Помогите начинающему.
Надо показать на экране список имеющехся сертификатов в хранилеще, для выбора пользователем. Плдскажите какими функциями это можно сделать. (имеется ввиду CryptoAPI функции)
 
Ответы:
25.08.2004 11:26:25Kirill Sobolev
перебор можно сделать с помощью CertEnumCertificatesInStore
25.08.2004 12:16:46Dim
Пытался. Но после выполнения функции CertNameToStr мне отдается пустая строка.
25.08.2004 12:18:45Kirill Sobolev
А пример можно?
25.08.2004 14:07:31Dim
Я пишу не на С так что не обесутте.
hCertStore=CertOpenSystemStore(0,"MY")
hSertCont=0
do while .t.
hSertCont=CertEnumCertificatesInStore(hCertStore,hSertCont)
if hSertCont=0
exit
endif
name_=space(512)
CertNameToStr(X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,hSertCont,0,@name_,512)

.............

enddo

CertNameToStr на выходе дает единицу.
Запускаю обработчик ошибок выдает "Встречено неверное значение тега ASN1"
25.08.2004 14:25:42Kirill Sobolev
Вообще то CertNameToStr надо передавать имя а не контекст сертификата целиком. Посмотрите поле структуры CERT_CONTEXT pCertInfo. В pCertInfo есть поля Issuer и Subject, их как раз и надо передавать.
25.08.2004 14:27:37Dim
Да все правильно я так и делаю, просто ошибся набирая текст.
25.08.2004 14:33:40Kirill Sobolev
Хорошо, а можно тогда взглянуть на текст без ошибок? И еще, что имеется в виду под 3им параметром, который 0.
25.08.2004 14:50:45Dim
В Visual FoxPro нет понятия структур поэтому приходится изврощатся.
hCertStore=CertOpenSystemStore(0,"MY")
hSertCont=0
do while .t.
hSertCont=CertEnumCertificatesInStore(hCertStore,hSertCont)
if hSertCont=0
exit
endif
a=createobject(’cert_contex’)
a.SetPointer(hSertCont)
a1=createobject(’ctruct_info’)
a1.SetPointer(a.pSertInfo)
CERT_NAME=a1.Subject
name_=space(512)
CertNameToStr(X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,CERT_NAME,1,@name_,51
2)

.............

enddo
В CERT_NAME получаем некое число, тоесть ссылку на CERT_NAME_BLOB
25.08.2004 14:54:37Kirill Sobolev
Да, с FoxPro я не знаком :) Но 2й параметр должен быть не ссылка, а указатель, т.е. видимо @CERT_NAME?
25.08.2004 15:01:26Dim
Пробовал по разному нечего неполучается. Всетаки видемо проблема описания структуры. Хотя уже не первый день работаю с нимим на Фоксе.
25.08.2004 15:17:44Serge3leo
Поищите в MSDN "CryptUI". Например, http://msdn.microsoft.com/library/en-us/seccrypto/security/cryptuidlgselectcertificatefromstore.asp