Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
Столкнулся с проблемой. Функция Код:
CryptGetKeyParam (hKey, KP_CERTIFICATE, NULL, &dwUserCertLength, 0);
возвращает ошибку, говорит, что "Требуемый сертификат не существует". А можно ли тогда при создании записать сертификат в ключ? P.S. Хотя, по идее, он должен быть уже в ключе Добавлю код, которым пытаюсь получить сертификат, может, что-то не так делаю Код:if(!CryptAcquireContext(&hCryptProvCA, 0, 0, PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT))
{
ShowError(GetLastError());
return false;
}
cbData=1000;
pbData = new BYTE[1024];
if(!CryptGetProvParam( hCryptProvCA, PP_SELECT_CONTAINER , pbData, &cbData, 0))
{
ShowError(GetLastError());
return false;
}
CString kontainer_name=pbData;
CryptReleaseContext(hCryptProvCA, 0);
if(!CryptAcquireContext( &hCryptProvCA, kontainer_name, NULL, PROV_GOST_2001_DH, 0))
{
ShowError(GetLastError());
return false;
}
if(!CryptGetProvParam(hCryptProvCA, PP_CONTAINER, pbData, &cbData, 0))
throw("Не удалось определить имя контейнера");
// получаем контекст сертификата ключа УЦ
HCRYPTKEY hKey=0;
if(!CryptGetUserKey( hCryptProvCA, AT_SIGNATURE , &hKey))
{
if(!CryptGetUserKey( hCryptProvCA, AT_KEYEXCHANGE , &hKey))
throw ("Error during CryptGetUserKey for signkey.");
}
// Проверяем сертификат
DWORD dwUserCertLength=0;
BYTE *UserCertBuf = 0;
if (!CryptGetKeyParam (hKey, KP_CERTIFICATE, UserCertBuf, &dwUserCertLength, 0))
{
ShowError(GetLastError());
throw ("Ошибка при получении сертификата (1).");
}
UserCertBuf=new BYTE[dwUserCertLength];
if (!CryptGetKeyParam (hKey, KP_CERTIFICATE, UserCertBuf,&dwUserCertLength, 0))
throw ("Ошибка при получении сертификата (2).");
Ошибку выдает первый CryptGetKeyParam Отредактировано пользователем 5 декабря 2008 г. 13:50:14(UTC)
| Причина: Не указана
|