Извлечение всех значений атрибута субъекта в сертификате - PullRequest
5 голосов
/ 29 февраля 2012

В настоящее время я использую CertGetNameString для извлечения значений для каждого атрибута субъекта следующим образом:

CertGetNameString(pCertificate,
                  CERT_NAME_ATTR_TYPE,
                  0,
                  szOID_ORGANIZATIONAL_UNIT_NAME,
                  buf,
                  _countof(buf));

Однако некоторые сертификаты, которые я обнаружил, имеют несколько значений для организационной структуры.Имя устройства (OU) и CertGetNameString могут читать только первые.Например, это предмет сертификата Adobe:

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

Как я могу прочитать все значения для атрибута (ов) OU (и других), используя CryptoAPI?

1 Ответ

16 голосов
/ 29 февраля 2012

Хорошо, нашел решение.Правильный API для использования - CertNameToStr, например:

    CertNameToStr(X509_ASN_ENCODING,
                  &pCertificate->pCertInfo->Subject,
                  CERT_X500_NAME_STR,
                  buf,
                  _countof(buf));

. Будет возвращена строка, такая как:

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"

, которая затем может быть проанализирована, если требуются значения отдельных атрибутов..

...