Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline peoplexiii  
#1 Оставлено : 6 мая 2008 г. 16:39:10(UTC)
peoplexiii

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.05.2008(UTC)
Сообщений: 7
Откуда: Kiev

Помогите Народ!

Как получить список сертификатов из Smartcard с помощью CryptoAPI?
Offline Максим Коллегин  
#2 Оставлено : 6 мая 2008 г. 21:19:02(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,405
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 720 раз в 624 постах
Открыть провайдер по имени считывателя, перечислить контейнеры, из каждого контейнера достать сертификат. Если CSP < 3.6, то отфильтровывать контейнеры по полному имени и провайдер открывать в VerifyContext первый раз.
Знания в базе знаний, поддержка в центре поддержки
Offline peoplexiii  
#3 Оставлено : 7 мая 2008 г. 10:01:39(UTC)
peoplexiii

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.05.2008(UTC)
Сообщений: 7
Откуда: Kiev

Спасибо!

Я писал такой код

//phProv Provider handler...
HCRYPTPROV phProv;

//Key Handler from ACS CSP
HCRYPTKEY hKey;

if (!CryptAcquireContext(phProv,NULL,"Advanced Card Systems CSP v1.9",PROV_RSA_FULL,CRYPT_MACHINE_KEYSET)) return;

if (!CryptGetUserKey(phProv,AT_SIGNATURE,&hKey) return;

При этом каманд CryptGetUserKey дает только Key Handler а не сертификаты.

Как перечислить все контейнеры? У вас есть какие то примеры?

Offline peoplexiii  
#4 Оставлено : 7 мая 2008 г. 12:33:23(UTC)
peoplexiii

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.05.2008(UTC)
Сообщений: 7
Откуда: Kiev

Я уже перечислил все имя контейнеры:


DWORD size;
DWORD fParam = CRYPT_FIRST;
CryptAcquireContext( &phProv,NULL,"Advanced Card Systems CSP v1.9",PROV_RSA_FULL,CRYPT_MACHINE_KEYSET);

while ( CryptGetProvParam(phProv, PP_ENUMCONTAINERS, NULL, &size, fParam) )
{
BYTE * ContNameD=(BYTE*)malloc(sizeof(BYTE*)*size);
int len = (int)size;
CryptGetProvParam(phProv, PP_ENUMCONTAINERS, ContNameD, &size, fParam);
ContNameD[len]=0;
WriteLog( " container name:"+ CString(ContNameD)+" \n" );
fParam = 0;
}

а как дальше извлекать сертификаты?

Offline Serge3leo  
#5 Оставлено : 8 мая 2008 г. 7:33:28(UTC)
Serge3leo

Статус: Активный участник

Группы: Участники
Зарегистрирован: 28.01.2008(UTC)
Сообщений: 40
Мужчина
Откуда: Москва

Поблагодарили: 3 раз в 2 постах
peoplexiii написал:
а как дальше извлекать сертификаты?

KP_CERTIFICATE
Offline peoplexiii  
#6 Оставлено : 8 мая 2008 г. 16:28:47(UTC)
peoplexiii

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.05.2008(UTC)
Сообщений: 7
Откуда: Kiev

Спасибо!
Я уже получил context of certificate:

CryptAcquireContext(&phProv,"afcf536b-0d90-c5f2-66fa-6eb571c796f1","Advanced Card Systems CSP v1.9",PROV_RSA_FULL,CRYPT_MACHINE_KEYSET);

СryptGetKeyParam(hKey, KP_CERTIFICATE, NULL, &certLength,0))ж

unsigned char* cert;

cert= (unsigned char*)malloc(certLength);

CryptGetKeyParam(hKey, KP_CERTIFICATE, cert, &certLength,0);

PCERT_CONTEXT pCertContext;

pCertContext = (PCERT_CONTEXT)CertCreateCertificateContext(
X509_ASN_ENCODING,cert,certLength);


Я попытал отобразить сертификат с помощью функции CryptUIDlgViewCertificate но не получается.

CRYPTUI_VIEWCERTIFICATE_STRUCT* vcstruct=(CRYPTUI_VIEWCERTIFICATE_STRUCT*)malloc(sizeof(CRYPTUI_VIEWCERTIFICATE_STRUCT));
vcstruct->dwSize= sizeof(vcstruct);
vcstruct->pCertContext = pCertContext;
vcstruct->szTitle = "KeyPal Certificate Display";
vcstruct->nStartPage = 0;
BOOL propschanged=FALSE;
if(!CryptUIDlgViewCertificate(vcstruct,&propschanged) )
WriteLog("\r\CryptUIDlgViewCertificate " + GetErrStr( GetLastError() ) );

Please help me!







Offline Serge3leo  
#7 Оставлено : 9 мая 2008 г. 7:38:30(UTC)
Serge3leo

Статус: Активный участник

Группы: Участники
Зарегистрирован: 28.01.2008(UTC)
Сообщений: 40
Мужчина
Откуда: Москва

Поблагодарили: 3 раз в 2 постах
peoplexiii написал:
Please help me!

CryptUIDlgViewCertificate

Не буду больше за Вас работу делать. Читайте лучше документацию и используте поиск.

Тогда уж пользуйтесь тем, на что есть примеры. Например, <CryptUIDlgViewContext>
Offline FW  
#8 Оставлено : 20 ноября 2008 г. 22:41:04(UTC)
FW

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.11.2008(UTC)
Сообщений: 2
Откуда: Moscow

maxdm написал:
Открыть провайдер по имени считывателя


А как "открыть" провайдер по имени считывателя?

Так (для Крипто ПРО 3.6 и считывателя "AKS ifdh 0") не работает:

HCRYPTPROV hProv = NULL;
BOOL bRet = ::CryptAcquireContext(&hProv, "AKS ifdh 0", "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", PROV_RSA_FULL, CRYPT_MACHINE_KEYSET);


P.S. Окончательная цель - вывести, при помощи CryptoAPI, список имен ключевых контейнеров на определённом считывателе. Т.е., то что делает данный диалог в Крипто ПРО CSP 3.6: UserPostedImage

Отредактировано пользователем 20 ноября 2008 г. 23:02:30(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#9 Оставлено : 21 ноября 2008 г. 3:07:51(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,405
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 720 раз в 624 постах
\\.\считка - все описано в документации.
Знания в базе знаний, поддержка в центре поддержки
Offline Vasko  
#10 Оставлено : 3 декабря 2008 г. 18:41:24(UTC)
Vasko

Статус: Участник

Группы: Участники
Зарегистрирован: 13.11.2008(UTC)
Сообщений: 27
Откуда: Russia

maxdm написал:
\\.\считка - все описано в документации.

Добрый день. подскажите пожалуйста, какая документация имеется ввиду?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.