And*_*son 5 c++ windows winapi certificate cryptoapi
我目前正在使用CertGetNameString
提取每个主题属性的值,如下所示:
CertGetNameString(pCertificate,
CERT_NAME_ATTR_TYPE,
0,
szOID_ORGANIZATIONAL_UNIT_NAME,
buf,
_countof(buf));
Run Code Online (Sandbox Code Playgroud)
但是,我发现的一些证书具有组织单位名称(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
Run Code Online (Sandbox Code Playgroud)
如何使用CryptoAPI读取OU(和其他)属性的所有值?
And*_*son 16
好的,找到了解决方案.正确使用的API是CertNameToStr
这样的:
CertNameToStr(X509_ASN_ENCODING,
&pCertificate->pCertInfo->Subject,
CERT_X500_NAME_STR,
buf,
_countof(buf));
Run Code Online (Sandbox Code Playgroud)
它将返回一个字符串,如:
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"
Run Code Online (Sandbox Code Playgroud)
如果需要单个属性值,则可以解析哪个.