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