CertGetNameStringA 函数 (wincrypt.h)
CertGetNameString 函数从证书 CERT_CONTEXT 结构中获取使用者或颁发者名称,并将其转换为 null终止的字符串。
语法
DWORD CertGetNameStringA(
[in] PCCERT_CONTEXT pCertContext,
[in] DWORD dwType,
[in] DWORD dwFlags,
[in] void *pvTypePara,
[out] LPSTR pszNameString,
[in] DWORD cchNameString
);
参数
[in] pCertContext
指向 CERT_CONTEXT 证书上下文的指针,其中包含要转换的使用者和颁发者名称。
[in] dwType
DWORD 指示如何找到名称以及如何设置输出的格式。
价值 | 意义 |
---|---|
|
如果证书具有使用者可选名称扩展或颁发者可选名称,请使用第一个 rfc822Name 选项。 如果在扩展中找不到 rfc822Name 选项,请使用电子邮件 OID 的“使用者名称”字段。 如果找到 rfc822Name 或 Email OID,请使用字符串。 否则,返回一个空字符串(返回的字符计数为 1)。 不使用 pvTypePara,并且设置为 NULL。 |
|
通过调用 CertNameToStr来转换使用者名称 BLOB。 pvTypePara 指向 DWORD,其中包含传递给 CertNameToStr的 dwStrType。 如果“使用者名称”字段为空,并且证书具有使用者可选名称扩展,请使用 CertNameToStr中的第一个目录名称选择。 |
|
|
|
循环访问以下名称属性列表,并在第一次出现时使用使用者名称或使用者可选名称扩展:szOID_COMMON_NAME、szOID_ORGANIZATIONAL_UNIT_NAME、szOID_ORGANIZATION_NAME或szOID_RSA_emailAddr。
如果未找到其中一个属性,请使用 rfc822Name 选项的使用者可选名称扩展。 如果没有匹配项,请使用第一个属性。 不使用 pvTypePara,并且设置为 NULL。 |
|
检查证书是否有CERT_FRIENDLY_NAME_PROP_ID属性。 如果证书具有此属性,则返回它。 如果证书没有该属性,则返回CERT_NAME_SIMPLE_DISPLAY_TYPE。 |
|
如果证书具有颁发者使用者可选名称扩展,颁发者可选名称,请搜索第一个 DNSName 选项。
如果在扩展中找不到 DNSName 选项,请在 CN OID 的“使用者名称”字段中搜索“2.5.4.3”。 如果找到 DNSName 或 CN OID,则返回字符串。 否则,返回空字符串。 |
|
如果证书具有颁发者使用者可选名称扩展,颁发者可选名称,请搜索第一个 URL 选项。 如果找到 URL 选项,则返回字符串。 否则,返回空字符串。 |
|
如果证书具有使用者可选名称扩展,请在其他名称选项中搜索查找 pszObjId == szOID_NT_PRINCIPAL_NAME(“1.3.6.1.4.1.311.20.2.3”)。
如果找到 UPN OID,将 BLOB 解码为X509_UNICODE_ANY_STRING并返回解码的字符串。 否则,返回空字符串。 |
[in] dwFlags
指示所需的处理类型。
价值 | 意义 |
---|---|
|
获取颁发者的名称。 如果未设置,则获取使用者的名称。 |
|
跳过将值解码为 UTF8 的默认初始尝试,并将该值解码为 8 位字符。 |
|
如果 dwType 参数设置为 CERT_NAME_DNS_TYPE,则会返回指定 DNS 值的所有适用名称。 如果没有 DNS 名称,但主题中有 CN 组件,则改为返回 CN。 如果有 CN 和 DNS 名称,则仅返回 DNS 名称。 这会模拟 SSL 链生成策略。 如果为非 CERT_NAME_DNS_TYPE的名称类型设置此标志,此函数将返回以 null 结尾的空字符串。
Windows 8 和 Windows Server 2012:对此标志的支持开始。 |
|
此标志基于以下定义的 dwType 参数值,将 IA5String 字符串解码为 Unicode 字符串值:
|
[in] pvTypePara
指向
[out] pszNameString
指向分配的缓冲区的指针,用于接收返回的字符串。 如果 pszNameString 未 NULL,并且 cchNameString 不为零,则 pszNameString 为 null终止字符串。
如果在 dwFlags 参数中指定了 CERT_NAME_SEARCH_ALL_NAMES_FLAG,并在 dwType 参数中设置 CERT_NAME_DNS_TYPE,则返回的字符串将包含应用的所有 DNS 名称。 输出字符串中的每个字符串都以 null 结尾,最后一个字符串将以 null 结尾。 如果未找到 DNS 名称,则返回单个以 null 结尾的空字符串。
[in] cchNameString
为返回的字符串分配的大小(以字符为单位)。 大小必须包含终止 NULL 字符。
返回值
返回转换的字符数,包括终止零字符。 如果 pszNameStringNULL 或 cchNameString 为零,则返回目标字符串所需的大小(包括终止 NULL 字符)。 如果未找到指定的名称类型,则返回 null-terminated 空字符串,返回的字符计数为 1。
言论
注意
wincrypt.h 标头将 CertGetNameString 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2003 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | wincrypt.h |
库 | Crypt32.lib |
DLL | Crypt32.dll |