2012-02-29 16 views
4

私は現在、それほどのように、各被験者の属性の値を抽出するために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 

は、どのように私はのCryptoAPIを使用してOU(および他の)属性(複数可)のすべての値を読むことができますか?

答えて

11

[OK]をクリックします。

個々の属性値が必要な場合、その後に解析することができ
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" 

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

それはのような文字列を返します。使用する正しいAPIはそうのような、CertNameToStrです。

関連する問題