#winapi #pkcs#11 #cryptoapi
#winapi #pkcs#11 #cryptoapi
Вопрос:
я использую PKCS # 11 для эмуляции токена, у меня есть сертификат в хранилище сертификатов Windows с надписью «У вас есть закрытый ключ, соответствующий этому сертификату». я пытаюсь найти функцию WinAPI, которая может считывать закрытый ключ сертификата (который находится либо в хранилище сертификатов, либо на жестком диске в формате pfx). Как я могу это сделать? Моя функция
static void ImportPrivateKey(const char* fileName, const char* password)
{
HCERTSTORE hSystemStore;
//Open the certificate store to be searched
if(hSystemStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
NULL,
CERT_SYSTEM_STORE_CURRENT_USER,
L"MY"))
printf("Opened the MY system store. n");
else
printf( "Could not open the MY system store.n");
PCCERT_CONTEXT pDesiredCert = NULL;
LPWSTR lpszCertSubject = L"7172gka"; // !!!! Name of certificate to search
// Search certificate
if(pDesiredCert=CertFindCertificateInStore(
hSystemStore,
MY_ENCODING_TYPE,
0,
CERT_FIND_SUBJECT_STR,
lpszCertSubject ,
pDesiredCert))
{
printf("The desired certificate was found. n");
}
else
{
printf("Could not find the desired certificate.n");
}
DWORD dwSize = 0;
CRYPT_KEY_PROV_INFO* pKeyInfo = NULL;
if(!(CertGetCertificateContextProperty(
pDesiredCert,
CERT_KEY_PROV_INFO_PROP_ID,
NULL,
amp;dwSize)))
{
printf("Error getting key property.n");
}
if(pKeyInfo)
free(pKeyInfo);
pKeyInfo = (CRYPT_KEY_PROV_INFO*)malloc(dwSize);
if(!pKeyInfo)
{
printf("Error allocating memory for pKeyInfo.n");
}
if(!(CertGetCertificateContextProperty(
pDesiredCert,
CERT_KEY_PROV_INFO_PROP_ID,
pKeyInfo,
amp;dwSize)))
{
printf("The second call to the function failedn");
}
printf("%sn", pKeyInfo->pwszProvName);
if(pKeyInfo->dwKeySpec == AT_SIGNATURE)
printf("Ok!n");
}
Комментарии:
1. вам нужно позвонить
CertGetCertificateContextProperty
сCERT_KEY_PROV_INFO_PROP_ID
для получения информации о поставщике, а затем экспортировать закрытый ключ из контейнера поставщика2. @RbMm как я могу экспортировать? я обновляю функцию
3. Не могли бы вы поделиться своим вариантом использования записи закрытого ключа в токен?