10.04.2003 17:26:29Ошибка при вызове функции AcquireCredentialsHandle Ответов: 1
Дмитрий
Есть следующий код:
SCHANNEL_CRED SchannelCred;
TimeStamp tsExpiry;
SECURITY_STATUS Status;
PCCERT_CONTEXT pCertContext = NULL;
LPSTR pszCertName="AuthServer";
HCERTSTORE hMyCertStore=NULL;

ULONG lStore =CERT_SYSTEM_STORE_CURRENT_USER;

//Возьмем сертификат сервера
hMyCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
0, lStore,
L"MY");
if(!hMyCertStore)
{
AfxMessageBox("Ошибка открытия хранилища сертификатов");
return ;
}

//Получим контекст сертификата
pCertContext = CertFindCertificateInStore(hMyCertStore,
X509_ASN_ENCODING,
0,
CERT_FIND_SUBJECT_STR_A,
pszCertName,
NULL);
if(pCertContext == NULL)
{
AfxMessageBox("**** Error 0x%x returned by CertFindCertificateInStore\n");
return ;
}


ZeroMemory(&SchannelCred, sizeof(SchannelCred));

SchannelCred.dwVersion = SCHANNEL_CRED_VERSION;

SchannelCred.cCreds = 1;
SchannelCred.paCred = &pCertContext;
SchannelCred.dwFlags=SCH_CRED_USE_DEFAULT_CREDS;

DWORD dwProtocol = 0;
SchannelCred.grbitEnabledProtocols = dwProtocol;
CredHandle hCreds;

Status = AcquireCredentialsHandle(
NULL, // Name of principal
UNISP_NAME_A, // Name of package
SECPKG_CRED_INBOUND, // Flags indicating use
NULL, // Pointer to logon ID
&SchannelCred, // Package specific data
NULL, // Pointer to GetKey() func
NULL, // Value to pass to GetKey()
&hCreds, // (out) Cred Handle
&tsExpiry); // (out) Lifetime (optional)
if(Status != SEC_E_OK)
{
char err[128];
sprintf(err,"Ошибка AcquireCredentialsHandle", Status);
AfxMessageBox(err);
return;
}


if(pCertContext)
{
CertFreeCertificateContext(pCertContext);
}

Есть сертификат, сгенерированный на вашем тестовом УЦ. Его предназначение - удостоверение подлинности сервера. ОС - Windows 2000. Функция AcquireCredentialsHandle все время заканчивается с ошибкой 0х80090304 (SEC_E_INTERNAL_ERROR). Доступ к CRL - есть. Я уже замучился. Заранее благодарен.
 
Ответы:
28.04.2003 11:02:23Peter
У меня такая же фигня тоже вначале была.
Потом я сертификат перенес в хранилище LOCAL_MACHINE, стала другая ошибка :
SEC_E_UNKNOWN_CREDENTIALS. Что-то тоже никак не могу победить.