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 值数组的指针。 此数组的大小在 “线路板”参数 中指定。
禁用 证书吊销列表 (CRL) 检索 证书颁发机构 (CA) 使用的证书。 如果 CA 证书包含此属性,则它还必须包含 CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 属性。
CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID
pvData 的数据类型:指向 BYTE 值数组的指针。 此数组的大小在 “线路板”参数 中指定。
包含 联机证书状态协议 列表, (OCSP) URL 用于 CA 证书颁发的证书。 数组内容是 抽象语法表示法 One (ASN.1) X509_AUTHORITY_INFO_ACCESS 结构的 编码字节, 其中 pszAccessMethod 设置为 szOID_PKIX_OCSP。
CERT_CROSS_CERT_DIST_POINTS_PROP_ID
pvData 的数据类型:指向 BYTE 值数组的指针。 此数组的大小在 “线路板”参数 中指定。
交叉证书的位置。 目前,此标识符仅适用于证书,不适用于 CRL 或 证书信任列表 (CTL) 。
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数据类型的指针。
返回 HCRYPTPROV 或 NCRYPT_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目前仅用于 CTL。
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)
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_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)
- 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”
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 值的数组。
有关每个属性标识符的详细信息,请参阅 CertSetCertificateContextProperty 中 dwPropId 参数的文档。
[out] pvData
指向缓冲区的指针,用于接收由 dwPropId 确定的数据。 返回的结构的成员指向的结构也会在基本结构之后返回。 因此, 在板数据 中包含的大小通常超过基本结构的大小。
此参数可以为 NULL ,用于设置信息的大小以用于内存分配。 有关详细信息,请参阅 检索长度未知的数据。
[in, out] pcbData
指向 DWORD 值的指针,该值指定 pvData 参数指向的缓冲区的大小(以字节为单位)。 函数返回时, DWORD 值包含要存储在缓冲区中的字节数。
若要在运行时获取所需的缓冲区大小,请为 pvData 参数传递 NULL,并将此参数指向的值设置为零。 如果 pvData 参数不为 NULL ,并且 在板Data 中指定的大小小于包含数据所需的字节数,则函数将失败, GetLastError 将返回 ERROR_MORE_DATA,并且所需大小将放置在 由ERROR_MORE_DATA Data 参数指向的变量中。
返回值
如果该函数成功,则函数返回 TRUE。
如果函数失败,则返回 FALSE。 有关扩展的错误信息,请调用 GetLastError。
一些可能的错误代码随之而来。
返回代码 | 说明 |
---|---|
|
证书没有指定的 属性。 |
|
如果 pvData 参数指定的缓冲区不够大,无法容纳返回的数据,则函数将设置 ERROR_MORE_DATA 代码,并将所需的缓冲区大小(以字节为单位)存储在 由ERROR_MORE_DATA指向的变量中。 |
调用的函数 CryptHashCertificate 中的 错误可以传播到此函数。
注解
属性不存储在证书中。 通常,在收到证书响应后,它们与证书相关联,然后随证书一起保存在存储区中。 出于安全原因,建议在保存属性值之前对其进行验证,并且仅将信息属性(如 CERT_FRIENDLY_NAME_PROP_ID 值)保存在用户存储中。 所有其他属性类型都应保存在本地计算机存储中。
代码可以使用宏来评估证书上下文的哈希类。 有关详细信息,请参阅 CertSetCertificateContextProperty。
示例
有关使用此函数的示例,请参阅 示例 C 程序:获取和设置证书属性 和 示例 C 程序:列出存储中的证书。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈