IX509CertificateRequestPkcs10::InitializeFromCertificate 方法 (certenroll.h)

InitializeFromCertificate 方法使用现有证书初始化证书请求。 证书包含在使用 可辨别编码规则 ( DER) 编码的字节数组中,如抽象语法表示法 1 (ASN.1) 标准所定义。 DER 编码字节数组由纯二进制序列或 Unicode 编码的字符串表示。

语法

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 必须是十六进制数字的偶数。
  • 忽略十六进制对之间的空格。
  • Encoding 参数必须设置为 XCN_CRYPT_STRING_HEXRAW
  • Context 参数确定是搜索用户或计算机存储还是同时搜索这两者。
  • 如果需要私钥,则仅搜索个人和请求存储。
  • 如果不需要私钥,则还会搜索根和中间 CA 存储。

[in] Encoding

一个 EncodingType 枚举值,该值指定应用于 DER 编码证书的 Unicode 编码的类型。 默认值为 XCN_CRYPT_STRING_BASE64

[in] InheritOptions

一个 X509RequestInheritOptions 枚举值,该值指定如何从现有证书创建证书请求对象。 可以通过选择以下值之一来指定如何继承密钥。 默认值为 InheritDefault

含义
InheritDefault
未指定提供程序和密钥继承。
InheritNewDefaultKey
创建新密钥,但继承默认加密提供程序。
InheritNewSimilarKey
创建新密钥,但继承用于创建现有证书的加密提供程序。
InheritPrivateKey
继承私钥和公钥。
InheritPublicKey
仅继承公钥。
 

还可以使用按位 OR 运算将键继承值与以下值的任意组合组合。

含义
InheritRenewalCertificateFlag
继承续订证书。 指定此标志将设置 RenewalCertificate 属性。
InheritTemplateFlag
继承证书模板。
InheritSubjectFlag
继承使用者可分辨名称。
InheritExtensionsFlag
从证书继承相关扩展。
InheritSubjectAltNameFlag
继承 SubjectAlternativeName 扩展。
InheritValidityPeriodFlag
继承有效期。
 

还可以指定 InheritNone ,以防止上表中的任何标志 (与密钥继承) 无关的标志默认实现。 如果指定 InheritNone, 但同时指定与密钥继承无关的标志,该方法将返回 E_INVALIDARG

如果将 InheritOptions 参数设置为零 (0) 或指定 InheritDefault 且未指定键继承值,则默认使用 InheritNewSimilarKey

如果将 InheritOptions 参数设置为零 (0) 或指定 InheritDefault ,并且未指定任何与键继承无关的值,则默认设置以下标志:

  • InheritSubjectFlag
  • InheritExtensionsFlag
  • InheritValidityPeriodFlag
  • 如果证书包含模板扩展) ,则 InheritTemplateFlag (

返回值

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

如果函数失败,它将返回一个 指示错误的 HRESULT 值。 可能的值包括(但并不限于)下表中的项。 有关常见错误代码的列表,请参阅 通用 HRESULT 值

返回代码 说明
HRESULT_FROM_WIN32 (ERROR_ALREADY_INITIALIZED)
已初始化证书请求对象。

注解

InitializeFromCertificate 方法验证 InheritOptions 参数中指定的选项,并通过执行以下操作初始化新的 PKCS #10 请求对象:

  • 将续订证书(如果有,并且已指定 InheritRenewalCertificateFlag)从输入证书复制到新请求。
  • 如果在现有证书中指定了模板,并且设置了 InheritTemplateFlag 值,则复制模板。
  • 如果指定 InheritSubjectFlag,请将使用者可分辨名称复制到新请求。
  • 如果指定 InheritSubjectAltNameFlag,则将使用者可选名称复制到新请求。
  • 如果指定 InheritExtensionsFlag,则将扩展复制到新请求。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 certenroll.h
DLL CertEnroll.dll

另请参阅

IX509CertificateRequestPkcs10