IX509CertificateRequestPkcs7::InitializeFromCertificate 方法 (certenroll.h)
InitializeFromCertificate 方法使用现有证书初始化证书请求。 该证书包含在使用 可辨别编码规则 ( DER) 编码的字节数组中,如抽象语法表示法 One (ASN.1) 标准所定义。 DER 编码的字节数组由纯二进制序列或 Unicode 编码的字符串表示。
语法
HRESULT InitializeFromCertificate(
[in] X509CertificateEnrollmentContext Context,
[in] VARIANT_BOOL RenewalRequest,
[in] BSTR strCertificate,
[in] EncodingType Encoding,
[in] X509RequestInheritOptions InheritOptions
);
参数
[in] Context
一个 X509CertificateEnrollmentContext 枚举值,该值指定请求的证书是面向最终用户、计算机还是代表计算机的管理员。
[in] RenewalRequest
指示最终实体是否请求续订 strCertificate 参数标识的证书的VARIANT_BOOL。
[in] strCertificate
包含 DER 编码证书的 BSTR 变量。
从 Windows 7 和 Windows Server 2008 R2 开始,可以指定证书指纹或序列号,而不是编码的证书。 这样做会导致函数在相应的本地存储中搜索匹配的证书。 请注意以下几点:
- BSTR 必须是偶数个十六进制数字。
- 忽略十六进制对之间的空格。
- Encoding 参数必须设置为 XCN_CRYPT_STRING_HEXRAW。
- Context 参数确定是搜索本地存储还是计算机存储或同时搜索两者。
- 如果需要私钥,则仅搜索个人和请求存储。
- 如果不需要私钥,则还会搜索根和中间 CA 存储。
[in] Encoding
一个 EncodingType 枚举值,该值指定应用于 DER 编码证书的编码类型。 默认值为 XCN_CRYPT_STRING_BASE64。
[in] InheritOptions
一个 X509RequestInheritOptions 枚举值,该值指定如何从现有证书创建证书请求对象。 可以通过选择以下值之一来指定如何继承密钥。 默认值为 InheritDefault。
值 | 含义 |
---|---|
|
未指定提供程序和密钥继承。 |
|
创建新密钥,但继承默认加密提供程序。 |
|
创建新密钥,但继承用于创建现有证书的加密提供程序。 |
|
继承私钥和公钥。 |
|
仅继承公钥。 |
还可以使用按位 AND 运算将键继承值与以下值的任意组合组合。
值 | 含义 |
---|---|
|
继承续订证书。 指定此标志将设置 ICertPropertyRenewal 值。 |
|
继承证书模板。 |
|
继承使用者可分辨名称。 |
|
从证书继承相关扩展。 |
|
继承 SubjectAlternativeName 扩展。 |
|
继承有效期。 |
还可以指定 InheritNone ,以防止上表中的任何标志 (与键继承) 无关的标志默认实现。 如果指定 InheritNone, 但同时指定与键继承无关的标志,该方法将返回 E_INVALIDARG。
如果将 InheritOptions 参数设置为零 (0) 或指定 InheritDefault 且未指定键继承值,则默认使用 InheritNewSimilarKey 。
如果将 InheritOptions 参数设置为零 (0) 或指定 InheritDefault 且未指定与键继承无关的任何值,则默认情况下会设置以下标志:
- InheritSubjectFlag
- InheritExtensionsFlag
- InheritValidityPeriodFlag
- 如果证书包含模板扩展) ,则 InheritTemplateFlag (
- 如果客户端续订证书,则 InheritRenewalCertificateFlag ()
返回值
如果函数成功,该函数将返回 S_OK。
如果函数失败,它将返回指示错误的 HRESULT 值。 可能的值包括(但并不限于)下表中的项。 有关常见错误代码的列表,请参阅 常见 HRESULT 值。
返回代码 | 说明 |
---|---|
|
证书请求对象已初始化。 |
注解
InitializeFromCertificate 方法验证 InheritOptions 参数中指定的选项,并通过执行以下操作初始化新的 PKCS #7 请求对象:
- 从证书、注册上下文创建 PKCS #10 请求对象,并在输入时指定继承选项。 PKCS #10 对象继承:
- 如果原始证书中存在模板,则为模板,并设置 InheritTemplateFlag 值。
- 如果指定 InheritSubjectFlag,则为使用者可分辨名称。
- 如果指定 InheritSubjectAltNameFlag,则为使用者可选名称。
- 如果指定 InheritExtensionsFlag,则为扩展。
- 将原始证书(如果要续订)复制到新 PKCS #10 请求上的 RenewalCertificate 属性。
- 从原始证书创建 ISignerCertificate (如果要续订),并在 SignerCertificate 属性上设置它。
- 将 PKCS #10 请求设置为内部请求对象。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | certenroll.h |
DLL | CertEnroll.dll |