Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Проблема получения сертификата подписчика - CertFindCertificateInStore
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
Делаю как в MSDN. При вызове функции CertFindCertificateInStore не находит сертификата в "Личных" сертификатах. который называетя Gafarov_Artur. Поле "Субъект" в сертификате: STREET = пр.Ленина, 40 CN = Gafarov_Artur O = ЦТБ L = Томск S = Томская C = RU Ну и вот сам код. Код:
// Открытие хранилища сертификатов.
// CertOpenStore - http://msdn.microsoft.com/en-us/library/aa376559(VS.85).aspx
if ( hCertStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0, // encoding type. 0 или X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
NULL,
CERT_SYSTEM_STORE_CURRENT_USER,
L"MY"))
printf("The MY store is opened");
else printf("The MY store could not be opened.");
LPWSTR lpszCertSubject = L"Gafarov_Artur";
// Get the certificate for the signer.
if(pSignerCertContext = CertFindCertificateInStore(
hCertStore,
MY_ENCODING_TYPE,
0,
CERT_FIND_SUBJECT_STR,
lpszCertSubject,
NULL))
printf("%s%d%s","Certificate",lpszCertSubject," was found"); // на эту строку внимания не обращайте,
// я даже не знаю как ее правильно писать, я cout использую
else
{
printf("%s%d%s","Certificate",lpszCertSubject," not found");
exit(1);
}
я может и совсем глупую ошибку сделал. но прошу объяснения, пожалуйста |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
Если применяю CERT_FIND_ANY вместо CERT_FIND_SUBJECT_STR, то сертификат вроде находит, но вызов следующей функции показывает другой сертификат, не то что я искал: Код:if(CertGetNameString(
pSignerCertContext ,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
pszNameString,
MAX_NAME) > 1)
{
cout - "The SIMPLE_DISPLAY_TYPE message signer's name is " - pszNameString - endl;
_tprintf(
TEXT("The SIMPLE_DISPLAY_TYPE message signer's name is ")
TEXT("%s \n"),
pszNameString);
}
else
{
MyHandleError(
TEXT("Getting the name of the signer failed.\n"));
}
у меня два сертификата стоит, вот он следующий и показывает. как быть? |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
А MY_ENCODING_TYPE что такое? CERT_FIND_ANY находит просто любой сертификат, критерии поиска не учитываются. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
На сам сертификат "Gafarov_Artur" можно взглянуть? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
вот открытый сертификат. пока я сделал вот так: (и терпимо работает вроде) Код:
// Get the certificate for the signer.
while (pSignerCertContext = CertEnumCertificatesInStore(hCertStore, pSignerCertContext))
{
if (!strcmp(pSignerCertContext->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId, szOID_CP_GOST_R3410EL))
{
CertGetNameString(
pSignerCertContext ,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
pszNameString,
MAX_NAME);
if (!strcmp(pszNameString,CharBuff_Signer))
{
// CryptAcquireCertificatePrivateKey – получает дескриптор CSP провайдера
// соответствующего сертификата.
if(( CryptAcquireCertificatePrivateKey( pSignerCertContext,
0,
NULL,
&hCryptProv,
&dwKeySpec,
NULL)))
{
Form1->Memo1->Lines->Add("CryptAcquireCertificatePrivateKey выполнилась успешно");
break;
}
else
{
Form1->Memo1->Lines->Add("Error CryptAcquireCertificatePrivateKey");
break;
}
}
}
}
Отредактировано пользователем 19 мая 2009 г. 3:55:00(UTC)
| Причина: Не указана Вложение(я):  Gafarov_Artur.cer (2kb) загружен 27 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться. |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Странно. У меня этот код находит этот сертификат в личных без проблем (WS 2003 R2, VS 2008). |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,400  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
Код://ошибка или недоработка в wincrypt.h
#ifdef CERT_FIND_SUBJECT_STR
# undef CERT_FIND_SUBJECT_STR
# undef CERT_FIND_ISSUER_STR
# ifdef _UNICODE
# define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
# define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
# else
# define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_A
# define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_A
# endif // !UNICODE
#endif
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
Kirill Sobolev написал:Странно. У меня этот код находит этот сертификат в личных без проблем (WS 2003 R2, VS 2008). У меня C++CodeGear 2009, пробывал и в VS 2008. Там тоже не сработала. Виндовс ХР, СП 3. |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
maxdm написал:Код://ошибка или недоработка в wincrypt.h
#ifdef CERT_FIND_SUBJECT_STR
# undef CERT_FIND_SUBJECT_STR
# undef CERT_FIND_ISSUER_STR
# ifdef _UNICODE
# define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
# define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
# else
# define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_A
# define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_A
# endif // !UNICODE
#endif
Можно здесь подробнее??? У меня в винкрипт.h нет даже строки #ifdef CERT_FIND_SUBJECT_STR. |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Проблема получения сертификата подписчика - CertFindCertificateInStore
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close