我目前正在使用CertGetNameString http://msdn.microsoft.com/en-us/library/windows/desktop/aa376086%28v=vs.85%29.aspx提取每个主题属性的值,如下所示:
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(和其他)属性的所有值?
好的,找到解决方案了。正确使用的 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"
如果需要单独的属性值,则可以对其进行解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)