18.05.2006 18:31:37Не могу экспортировать ключь (флаг экспорта стоит) Ответов: 1
Иван
Код ниже создает самоподисанный корневой сертификат, после установки,, я не могу экспортировать его с закрытым ключом, что не так, подскажите пожалуста... Спасибо.

CCC_CreateSelfCert::CCC_CreateSelfCert(const char *Subject, const char *Organization, const char *Country, SYSTEMTIME *Expiry)
{
DWORD err;
HRESULT hr;
HCERTSTORE hMemoryStore;
char CertKeyContainerName[100];
HCRYPTKEY hKey;

BYTE* PrivateKey;
DWORD PrivateKeySize;
BYTE* PublicKey;
DWORD PublicKeySize;
HCRYPTPROV hCryptProvSelf;

if(!CryptAcquireContext(&hCryptProvSelf, 0, MS_DEF_PROV, PROV_RSA_FULL, 0))
{
//error
}

if(!CryptGenKey(hCryptProvSelf, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &hKey))
{
CryptReleaseContext(hCryptProvSelf, 0);
//error
}

sprintf(CertKeyContainerName, "%s", Subject);
char X500Name[256];

sprintf(X500Name, "CN=\"%s\"", Subject);
CERT_NAME_BLOB certName = {0};
certName.cbData = 0;
certName.pbData = NULL;
if (!CertStrToName(MY_ENCODING_TYPE, X500Name,CERT_OID_NAME_STR, NULL,
NULL, &certName.cbData, NULL))
{
// Error
}


certName.pbData = (PBYTE) malloc(certName.cbData);
if (!CertStrToName(MY_ENCODING_TYPE, X500Name, CERT_OID_NAME_STR, NULL,
certName.pbData, &certName.cbData, NULL))
{
// Error
}

SYSTEMTIME cs;
if (Expiry == NULL)
{
GetSystemTime(&cs);
cs.wYear += 10;
Expiry = &cs;
}

PCCERT_CONTEXT pCertCtx = CertCreateSelfSignCertificate(hCryptProvSelf,
&certName, 0, NULL, NULL, NULL, Expiry, NULL);
free(certName.pbData);
if(!pCertCtx)
{
//return GetLastError();
}
if(!(hMemoryStore = CertOpenSystemStoreW(
0,
L"ROOT")))
{
//ERROR
}
else
{
if(!CertAddCertificateContextToStore(hMemoryStore,pCertCtx,CERT_STORE_ADD_NEW,NULL))
{
//Error
}

}
}
 
Ответы:
19.05.2006 9:13:48Kirill Sobolev
А привязку контейнера к сертификату делаете?