Aplikacja kliencka musi uzyskać dostęp do certyfikatu z magazynu certyfikatów systemu Windows. Dane wejściowe wyszukiwania to nazwa podmiotu w formacie ciągu X500, jak poniżej.Potrzebujesz pomocy w znalezieniu certyfikatu według nazwy podmiotu (format X500, CERT_X500_NAME_STR) przy użyciu funkcji CertFindCertificateInStore()?
"C=CH, S=Aargau, L=Baden, O=Test, OU=FF, CN= Test Root"
Dokładne dopasowanie jest wymagane (nie podciąga się pod łańcuch przy użyciu CERT_FIND_SUBJECT_STR). Do tego należy wykonać następujące czynności
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;
}
}
}
Problemem jest to, że zawsze zwraca NULL CertFindCertificateInStore wskaźnik. Debugowałem, ale nie mogłem się dowiedzieć, co tu jest nie tak.
Wszelkie sugestie będą bardzo pomocne.
co sklep może szukają Państwo certyfikat? tj. hStore USER lub MACHINE? – Raj
Szukam w sklepie USER. – Sreekanth