Un'applicazione client deve accedere al certificato dall'archivio certificati di Windows. L'input di ricerca è il nome del soggetto nel formato di stringa X500 come indicato di seguito.Hai bisogno di aiuto per trovare il certificato in base al nome del soggetto (formato X500, CERT_X500_NAME_STR) utilizzando CertFindCertificateInStore()?
"C=CH, S=Aargau, L=Baden, O=Test, OU=FF, CN= Test Root"
è necessaria una corrispondenza esatta (non substring partita usando CERT_FIND_SUBJECT_STR). Per questo faccio la seguente
CERT_NAME_BLOB subjectname = {0};
/*convert the input X500 string to encoded subject name*/
bRet = CertStrToNameA(X509_ASN_ENCODING, "C=CH, S=Aargau, L=Baden, O=Test, OU=S1, CN= Test Root", CERT_X500_NAME_STR, NULL, NULL, &size, NULL);
if(TRUE == bRet)
{
subjectname.pbData = (BYTE*)malloc(size);
subjectname.cbData = size;
bRet = CertStrToNameA(X509_ASN_ENCODING , "C=CH, S=Aargau, L=Baden, O=Test, OU=S1, CN=Test Root", CERT_X500_NAME_STR, NULL, subjectname.pbData, &subjectname.cbData, NULL);
if(TRUE == bRet)
{
capiCertificate = CertFindCertificateInStore(hStore, X509_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &subjectname, NULL);
if (NULL == capiCertificate)
{
errorcode = GetLastError();
ret = CA_CERT_NOT_FOUND;
}
}
}
Il problema è che CertFindCertificateInStore restituisce sempre puntatore NULL. Ho eseguito il debug, ma non sono riuscito a scoprire cosa sta andando storto qui.
Qualsiasi suggerimento sarà molto utile.
quello negozio cercate il certificato? vale a dire hStore UTENTE o MACCHINA? – Raj
Sto cercando nel negozio USER. – Sreekanth