c ++ - Udtrækning af alle værdier af en subjektattribut i et certifikat

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger for øjeblikket CertGetNameString til at udtrække værdierne for hvert emne attribut som sådan: [8]


CertGetNameString(pCertificate,
                  CERT\_NAME\_ATTR\_TYPE,
                  0,
                  szOID\_ORGANIZATIONAL\_UNIT\_NAME,
                  buf,
                  \_countof(buf));


Men nogle certifikater jeg har fundet har flere værdier for organisationsenhedsnavnet (OU) og CertGetNameString kan kun læse den første. Dette er f.eks. Et Adobe-certifikat:


CN = Adobe Systems, Incorporated
OU = Acrobat Engineering
OU = Digital ID Class 3 - Microsoft Software Validation v2
O = Adobe Systems, Incorporated
L = San Jose
S = California
C = US


Hvordan kan jeg læse alle værdier for OU (og andre) attributter ved hjælp af CryptoAPI?

Bedste reference


Ok, fundet løsningen. Den korrekte API til brug er CertNameToStr, som sådan:


    CertNameToStr(X509\_ASN\_ENCODING,
                  &pCertificate->pCertInfo->Subject,
                  CERT\_X500\_NAME\_STR,
                  buf,
                  \_countof(buf));


Det vil returnere en streng som:


C=US, S=California, L=San Jose, O="Adobe Systems, Incorporated", OU=Digital ID Class 3 - Microsoft Software Validation v2, OU=Acrobat Engineering, CN="Adobe Systems, Incorporated"


Hvilket kan så analyseres, hvis der kræves individuelle attributværdier.