| ||||
| ||||
Код ниже создает самоподисанный корневой сертификат, после установки,, я не могу экспортировать его с закрытым ключом, что не так, подскажите пожалуста... Спасибо. 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 } } } | ||||
Ответы: | ||||
| ||||
А привязку контейнера к сертификату делаете? | ||||