CertGetCertificateContextProperty 函数 (wincrypt.h)

CertGetCertificateContextProperty 函数检索 证书上下文的扩展属性中包含的信息。

语法

BOOL CertGetCertificateContextProperty(
  [in]      PCCERT_CONTEXT pCertContext,
  [in]      DWORD          dwPropId,
  [out]     void           *pvData,
  [in, out] DWORD          *pcbData
);

参数

[in] pCertContext

指向包含要检索的属性的 证书CERT_CONTEXT 结构的指针。

[in] dwPropId

要检索的属性。 下表中列出了当前定义的标识符和要 pvData 中返回的数据类型。

CERT_ACCESS_STATE_PROP_ID

pvData的数据类型:指向 DWORD 值的指针。

返回一个 DWORD 值,该值指示是否持久保存对证书的写入操作。 如果证书位于内存存储中或以只读身份打开的基于注册表的存储中,则不会设置 DWORD 值。

CERT_AIA_URL_RETRIEVED_PROP_ID

此标识符保留。

CERT_ARCHIVED_KEY_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

为证书上下文返回以前保存的加密密钥 哈希

CERT_ARCHIVED_PROP_ID

pvData的数据类型:NULL。 如果 CertGetCertificateContextProperty 函数返回 true,则 CERT_CONTEXT存在指定的属性 ID。

指示在枚举期间跳过证书。 使用显式搜索操作找到具有此属性集的证书,例如用于查找具有特定哈希或序列号的证书的证书。 pvData 中没有任何数据与此属性相关联。

CERT_AUTHORITY_INFO_ACCESS_PROP_ID

此标识符保留。

CERT_AUTO_ENROLL_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回一个以 null 结尾的 Unicode 字符串,该字符串为证书自动注册的证书类型命名。

CERT_AUTO_ENROLL_RETRY_PROP_ID

此标识符保留。

CERT_BACKED_UP_PROP_ID

此标识符保留。

CERT_CA_DISABLE_CRL_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

证书颁发机构(CA)使用的证书禁用 证书吊销列表(CRL) 检索。 如果 CA 证书包含此属性,则还必须包含 CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 属性。

CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

包含用于 CA 证书颁发的证书的 联机证书状态协议(OCSP)URL 的列表。 数组内容是 X509_AUTHORITY_INFO_ACCESS 结构的 抽象语法表示法一(ASN.1)编码字节,其中 pszAccessMethod 设置为 szOID_PKIX_OCSP

CERT_CROSS_CERT_DIST_POINTS_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

交叉证书的位置。 目前,此标识符仅适用于证书,不适用于 CRL 或 证书信任列表(CCL)。

BYTE 数组包含使用 CryptDecodeObject 函数和 lpszStuctType 参数 X509_CROSS_CERT_DIST_POINTS 值的 ASN.1 编码 CROSS_CERT_DIST_POINTS_INFO 结构。

CERT_CTL_USAGE_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回包含 ASN.1 编码 CTL_USAGE 结构的字节数组。

CERT_DATE_STAMP_PROP_ID

pvData的数据类型:指向 FILETIME 结构的指针。

将证书添加到存储区的时间。

CERT_DESCRIPTION_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回证书 UI 显示的属性。 此属性允许用户描述证书的使用。

CERT_EFS_PROP_ID

此标识符保留。

CERT_ENHKEY_USAGE_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回包含 ASN.1 编码 CERT_ENHKEY_USAGE 结构的字节数组。 此结构包含增强型密钥用法数组 对象标识符(OID),每个标识符都指定证书的有效用法。

CERT_ENROLLMENT_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

包含 RequestID、CADNSName、CAName 和 DisplayName 的挂起请求的注册信息。 数据格式定义如下:

字节 内容
前 4 个字节 挂起的请求 ID
接下来 4 个字节 CADNSName 大小(以字符为单位,包括终止 null 字符)后跟具有终止 null 字符的 CADNSName 字符串
接下来 4 个字节 CAName 大小(以字符为单位,包括终止 null 字符)后跟带有终止 null 字符的 CAName 字符串
接下来 4 个字节 DisplayName 大小(以字符为单位,包括终止 null 字符)后跟带有终止 null 字符的 DisplayName 字符串

CERT_EXTENDED_ERROR_INFO_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回一个以 null 结尾的 Unicode 字符串,该字符串包含证书上下文的扩展错误信息。

CERT_FORTEZZA_DATA_PROP_ID

此标识符保留。

CERT_FRIENDLY_NAME_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回一个以 null 结尾的 Unicode 字符串,该字符串包含证书的显示名称。

CERT_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回 SHA1 哈希。 如果哈希不存在,则使用 CryptHashCertificate 函数计算该哈希。

CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID

pvData的数据类型:指向 HCRYPTPROV_OR_NCRYPT_KEY_HANDLE 数据类型的指针。

返回 HCRYPTPROVNCRYPT_KEY_HANDLE 选项。

CERT_HCRYPTPROV_TRANSFER_PROP_ID

返回与证书关联的加密 API (CAPI) 密钥句柄。 调用方负责释放句柄。 释放上下文时不会释放它。 返回属性值后,将删除该值。 如果在具有 CNG 键的上下文上调用此属性,则返回 CRYPT_E_NOT_FOUND

CERT_IE30_RESERVED_PROP_ID

此标识符保留。

CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

公钥的 MD5 哈希 与用于对此证书签名的 私钥 相关联。

CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

来自此证书的颁发者名称和序列号的 MD5 哈希。

CERT_KEY_CONTEXT_PROP_ID

pvData的数据类型:指向 CERT_KEY_CONTEXT 结构的指针。

返回 CERT_KEY_CONTEXT 结构。

CERT_KEY_IDENTIFIER_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

如果不存在,请搜索 szOID_SUBJECT_KEY_IDENTIFIER 扩展。 如果失败,则对证书的 SubjectPublicKeyInfo 成员执行 SHA1 哈希以生成标识符值。

CERT_KEY_PROV_HANDLE_PROP_ID

pvData的数据类型:指向 HCRYPTPROV 值的指针。

返回从CERT_KEY_CONTEXT_PROP_ID获取的提供程序句柄。

CERT_KEY_PROV_INFO_PROP_ID

pvData的数据类型:指向 CRYPT_KEY_PROV_INFO 结构的指针。

返回指向 CRYPT_KEY_PROV_INFO 结构的指针。

CERT_KEY_SPEC_PROP_ID

pvData的数据类型:指向 DWORD 值的指针。

返回一个 DWORD 值,该值指定从CERT_KEY_CONTEXT_PROP_ID获取的私钥(如果存在)。 否则,如果存在CERT_KEY_PROV_INFO_PROP_ID,则它是 dwKeySpec的源。

CERT_MD5_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回 MD5 哈希。 如果哈希不存在,则使用 CryptHashCertificate 函数计算该哈希。

CERT_NCRYPT_KEY_HANDLE_PROP_ID

pvData的数据类型:指向 NCRYPT_KEY_HANDLE 数据类型的指针。

返回 CERT_NCRYPT_KEY_SPEC 选项(如果适用)。

CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID

返回与证书关联的 CNG 密钥句柄。 调用方负责释放句柄。 释放上下文时不会释放它。 返回属性值后,将删除该值。 如果对具有旧密钥(CAPI)密钥的上下文调用此属性,则返回 CRYPT_E_NOT_FOUND

CERT_NEW_KEY_PROP_ID

此标识符保留。

CERT_NEXT_UPDATE_LOCATION_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回 ASN.1 编码 CERT_ALT_NAME_INFO 结构。

CERT_NEXT_UPDATE_LOCATION_PROP_ID当前仅用于 CCL。

CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID

此标识符保留。

CERT_OCSP_CACHE_PREFIX_PROP_ID

此标识符保留。

CERT_OCSP_RESPONSE_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回此证书的编码 OCSP 响应。

CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID

pvData的数据类型:指向以 null 结尾的 Unicode 字符串的指针。

返回表示证书公钥算法和位长度的 L"<PUBKEY><BITLENGTH>" 字符串。 支持以下 <PUBKEY> 算法:

  • L“RSA”(BCRYPT_RSA_ALGORITHM)
  • L“DSA”(BCRYPT_DSA_ALGORITHM)
  • L“ECDSA”(SSL_ECDSA_ALGORITHM)

Windows 8 和 Windows Server 2012:开始 对此属性的支持。

CERT_PUBKEY_ALG_PARA_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

对于支持算法参数继承的公钥,返回 ASN.1 编码的 PublicKey 算法参数。 对于 数字签名标准 (DSS),返回使用 CryptEncodeObject 函数编码的参数。 仅当定义CMS_PKCS7时,才使用此属性。

CERT_PUBKEY_HASH_RESERVED_PROP_ID

此标识符保留。

CERT_PVK_FILE_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回一个以 null 结尾的 Unicode 宽字符串,该字符串包含与证书公钥关联的私钥的文件名。

CERT_RENEWAL_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回续订证书的哈希。

CERT_REQUEST_ORIGINATOR_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回一个以 null 结尾的 Unicode 字符串,该字符串包含证书上下文请求的起源的 DNS 计算机名称。

CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回指向包含上下文根证书的应用程序策略的编码 CERT_POLICIES_INFO 结构的指针。 可以使用 CryptDecodeObject 函数对此属性进行解码,并将 lpszStructType 参数设置为 X509_CERT_POLICIES,并将 dwCertEncodingType 参数设置为 X509_ASN_ENCODING 按位 ORPKCS_7_ASN_ENCODING的组合。

CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID

此标识符保留。

CERT_SHA1_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回 SHA1 哈希。 如果哈希不存在,则使用 CryptHashCertificate 函数计算该哈希。

CERT_SHA1_SHA256_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小为 52 字节,SHA1 哈希为 20 字节,SHA256 哈希为 32 字节。

返回 SHA1 哈希和 SHA256 哈希的组合。 如果哈希不存在,则使用 CryptHashCertificate 函数计算该哈希。

CERT_SHA256_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回 SHA256 哈希。 如果哈希不存在,则使用 CryptHashCertificate 函数计算该哈希。

CERT_SIGN_HASH_CNG_ALG_PROP_ID

pvData的数据类型:指向以 null 结尾的 Unicode 字符串的指针。

返回表示证书签名的 L"<SIGNATURE>/<HASH>" 字符串。 <SIGNATURE> 值标识 CNG 公钥算法。 支持以下算法:

  • L“RSA”(BCRYPT_RSA_ALGORITHM)
  • L“DSA”(BCRYPT_DSA_ALGORITHM)
  • L“ECDSA”(SSL_ECDSA_ALGORITHM)

<HASH> 值标识 CNG 哈希算法。 支持以下算法:

  • L“MD5”(BCRYPT_MD5_ALGORITHM)
  • L“SHA1”(BCRYPT_SHA1_ALGORITHM)
  • L“SHA256” (BCRYPT_SHA256_ALGORITHM)
  • L“SHA384” (BCRYPT_SHA384_ALGORITHM)
  • L“SHA512” (BCRYPT_SHA512_ALGORITHM)

下面是常见示例:

  • L“RSA/SHA1”
  • L“RSA/SHA256”
  • L“ECDSA/SHA256”

Windows 7 和 Windows Server 2008 R2: 此属性的支持开始。

CERT_SIGNATURE_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回签名哈希。 如果哈希不存在,则使用 CryptHashToBeSigned 函数计算该哈希。 哈希的长度是 SHA 的 20 字节,MD5 为 16 字节。

CERT_SMART_CARD_DATA_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回指向已编码智能卡数据的指针。 在调用 CertGetCertificateContextProperty之前,可以使用此常量来检索智能卡证书,方法是使用 CertFindCertificateInStore 函数,并将 pvFindPara 参数设置为 CERT_SMART_CARD_DATA_PROP_ID,并将 dwFindType 参数设置为 CERT_FIND_PROPERTY

CERT_SMART_CARD_ROOT_INFO_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回指向编码 CRYPT_SMART_CARD_ROOT_INFO 结构的指针。

CERT_SOURCE_LOCATION_PROP_ID

此标识符保留。

CERT_SOURCE_URL_PROP_ID

此标识符保留。

CERT_SUBJECT_DISABLE_CRL_PROP_ID

此标识符保留。

CERT_SUBJECT_INFO_ACCESS_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

以编码 CERT_SUBJECT_INFO_ACCESS 结构的形式返回证书上下文的主题信息访问扩展。

CERT_SUBJECT_NAME_MD5_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回证书上下文的编码使用者名称的 MD5 哈希。

CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID

此标识符保留。

CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID

pvData的数据类型:指向 DWORD 值的指针。

返回证书中公钥的长度(以位为单位)。

Windows 8 和 Windows Server 2012:开始 对此属性的支持。

CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID

pvData的数据类型:指向 BYTE 值的数组的指针。 此数组的大小在 参数中指定。

返回此证书公钥的 MD5 哈希。

对于所有用户定义的属性标识符,pvData 指向 BYTE 值的数组。

有关每个属性标识符的详细信息,请参阅 CertSetCertificateContextPropertydwPropId 参数的文档。

[out] pvData

指向缓冲区的指针,用于接收由 dwPropId确定的数据。 返回的结构的成员所指向的结构也会在基本结构后返回。 因此, 中包含的大小通常超过基本结构的大小。

此参数可以 NULL,以便为内存分配设置信息的大小。 有关详细信息,请参阅 检索未知长度的数据。

[in, out] pcbData

指向 DWORD 值的指针,该值指定由 pvData 参数指向的缓冲区的大小(以字节为单位)。 函数返回时,DWORD 值包含要存储在缓冲区中的字节数。

若要在运行时获取所需的缓冲区大小,请为 pvData 参数传递 NULL,并将此参数指向的值设置为零。 如果 pvData 参数未 NULL 中指定的大小小于包含数据所需的字节数,则该函数将失败,GetLastError 返回 ERROR_MORE_DATA,并且所需的大小放置在 参数指向的变量中。

注意

处理缓冲区中返回的数据时,应用程序必须使用返回的数据的实际大小。 实际大小可以略小于输入中指定的缓冲区的大小。 (在输入时,缓冲区大小通常足够大,以确保最大的输出数据适合缓冲区。输出时,将更新此参数指向的变量,以反映复制到缓冲区的数据的实际大小。

返回值

如果函数成功,该函数将返回 true

如果该函数失败,则返回 FALSE。 有关扩展错误信息,请调用 GetLastError

下面是一些可能的错误代码:

返回代码 描述
CRYPT_E_NOT_FOUND 证书没有指定的属性。
ERROR_MORE_DATA 如果由 pvData 参数指定的缓冲区不足以容纳返回的数据,则函数将设置 ERROR_MORE_DATA 代码,并将所需的缓冲区大小(以字节为单位)存储在 指向的变量中。

调用的函数 CryptHashCertificate 的错误可以传播到此函数。

言论

属性不存储在证书中。 通常,在收到证书响应后,它们与证书相关联,然后在存储中随证书一起保存。 出于安全原因,建议在保存属性值之前验证属性值,并且只保存信息属性,例如用户存储中的 CERT_FRIENDLY_NAME_PROP_ID 值。 所有其他属性类型都应保存在本地计算机存储中。

代码可以使用宏来评估证书上下文的哈希类。 有关详细信息,请参阅 CertSetCertificateContextProperty

例子

有关使用此函数的示例,请参阅 示例 C 程序:获取和设置证书属性示例 C 程序:列出存储中的证书。

要求

要求 价值
最低支持的客户端 Windows XP [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 窗户
标头 wincrypt.h
Crypt32.lib
DLL Crypt32.dll

另请参阅

CERT_KEY_CONTEXT

CertCreateCertificateContext

CertSetCertificateContextProperty

CryptHashCertificate

CryptHashToBeSigned

扩展属性函数