CertSetCRLContextProperty 函数 (wincrypt.h)

CertSetCRLContextProperty 函数为指定的证书吊销列表 (CRL) 上下文设置扩展属性。

语法

BOOL CertSetCRLContextProperty(
  [in] PCCRL_CONTEXT pCrlContext,
  [in] DWORD         dwPropId,
  [in] DWORD         dwFlags,
  [in] const void    *pvData
);

参数

[in] pCrlContext

指向 CRL_CONTEXT 结构的指针。

[in] dwPropId

标识要设置的属性。 dwPropId 的值确定 pvData 参数的类型和内容。 下表列出了 pvData 中当前定义的标识符和要返回的数据类型。

通常,仅设置以下属性:

  • CERT_HASH_PROP_ID
  • CERT_SHA1_HASH_PROP_ID
  • CERT_MD5_HASH_PROP_ID
  • CERT_SIGNATURE_HASH_PROP_ID
含义
CERT_ACCESS_STATE_PROP_ID
pvData 的数据类型:指向 DWORD 的指针

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

CERT_ARCHIVED_PROP_ID
pvData 的数据类型:NULL

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

CERT_AUTO_ENROLL_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置一个 以 null 结尾的 Unicode 字符串,命名已为其自动注册证书的证书类型。

CERT_CTL_USAGE_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置包含 抽象语法表示法 One 的字节数组 (ASN.1) 编码 CTL_USAGE 结构。

CERT_DESCRIPTION_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置证书 UI 显示的属性。 此属性允许用户描述证书的用法。

CERT_ENHKEY_USAGE_PROP_ID
pvData 的数据类型:

设置包含 ASN.1 编码 CERT_ENHKEY_USAGE 结构的字节数组。

CERT_FRIENDLY_NAME_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置一个 以 null 结尾的 Unicode 字符串,该字符串包含 CRL 的显示名称。

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

设置包含一组 L“<PUBKEY>/<BITLENGTH>”公钥算法和位长度对的字符串。 分号 L“;”用作分隔符。

<PUBKEY> 值标识 CNG 公钥算法。 支持以下算法:

  • L“RSA” (BCRYPT_RSA_ALGORITHM)
  • L“DSA” (BCRYPT_DSA_ALGORITHM)
  • L“ECDSA” (SSL_ECDSA_ALGORITHM)
为 CRL 颁发者链(不包括叶)中的每个证书设置 PUBKEY<BITLENGTH> 对。></ 将具有独立签名者链的 OCSP 响应转换为 CRL 时,可以设置此属性。
注意 不应为委派的 OCSP 签名者证书设置此属性。 委托签名者证书使用用于对使用者证书进行签名的相同密钥进行签名,并在此处进行检查。
 
以下是一个示例:

:L“RSA/2048;RSA/4096”

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

设置包含一组 L“SIGNATURE /<HASH><算法对的字符串。> 分号 L“;”用作对之间的分隔符。

仅当 OCSP 响应转换为 CRL 时,才会设置此属性。 对于委派的 OCSP 签名者证书,仅返回签名者证书的算法对。 对于独立的 OCSP 签名者证书链,为链中的每个证书返回一个算法对(不包括根证书)。

<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/SHA256;RSA/SHA256”
此属性由验证吊销函数显式设置。
CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
pvData 的数据类型:指向CRYPT_DATA_BLOB结构的指针。

设置 CRL 颁发者证书中公钥的长度(以位为单位)。 此属性也适用于已转换为 CRL 的 OCSP。

此属性由验证吊销函数显式设置。

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

CERT_KEY_CONTEXT_PROP_ID
pvData 的数据类型:指向CERT_KEY_CONTEXT的指针

设置 CERT_KEY_CONTEXT 结构。

CERT_KEY_IDENTIFIER_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针
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_NEXT_UPDATE_LOCATION_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置 CTL 上的 ASN.1 编码 CERT_ALT_NAME_INFO 结构。

CERT_PVK_FILE_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置以 null 结尾的 Unicode 宽字符串,该字符串指定包含与证书公钥关联的私钥的文件的名称。

CERT_SHA1_HASH_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置 SHA1 哈希。 可以使用 CryptHashCertificate 计算哈希。

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

设置表示证书签名的 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”
此属性也适用于已转换为 CRL 的 OCSP 响应。

此属性由验证吊销函数显式设置。

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

CERT_SIGNATURE_HASH_PROP_ID
pvData 的数据类型:指向 BYTE 数组的指针

设置签名哈希。 如果哈希不存在,则使用 CryptHashToBeSigned 计算该哈希。 对于 SHA,哈希的长度为 20 字节,MD5 的长度为 16 字节。

 

用户可以使用从 CERT_FIRST_USER_PROP_ID 到 CERT_LAST_USER_PROP_ID 的 DWORD 值定义其他 dwPropId 类型。 对于所有用户定义的 dwPropId 类型, pvData 指向编码 CRYPT_DATA_BLOB

对于所有其他属性标识符, pvData 指向编码 CRYPT_DATA_BLOB 结构。

[in] dwFlags

可以为CERT_KEY_PROV_HANDLE_PROP_ID或CERT_KEY_CONTEXT_PROP_ID dwPropId 属性设置CERT_STORE_NO_CRYPT_RELEASE_FLAG。

如果设置了CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG值,则忽略任何提供程序写入错误,并始终设置缓存上下文的属性。

如果设置了CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG,则不会保留任何属性集。

[in] pvData

指向由 dwPropId 中传递的值确定的数据类型的指针。

注意 对于任何 dwPropId,将 pvData 设置为 NULL 会删除 属性。
 

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE。 有关扩展的错误信息,请调用 GetLastError。 下面是一个可能的错误代码。

返回代码 说明
E_INVALIDARG
属性无效。 指定的标识符大于 0x0000FFFF,或者对于 CERT_KEY_CONTEXT_PROP_ID 属性,在 CERT_KEY_CONTEXT 结构中指定了无效的 cbSize 成员。

注解

如果属性已存在,则替换其旧值。

示例

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

要求

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

另请参阅

CERT_ALT_NAME_INFO

CERT_CONTEXT

CERT_ENHKEY_USAGE

CERT_KEY_CONTEXT

CRL_CONTEXT

CRYPT_DATA_BLOB

CRYPT_HASH_BLOB

CRYPT_KEY_PROV_INFO

CTL_USAGE

CertGetCRLContextProperty

CertSetCertificateContextProperty

CryptEncodeObject

CryptHashToBeSigned

扩展属性函数