IX509CertificateRequestPkcs10::InitializeFromPrivateKey 方法 (certenroll.h)

InitializeFromPrivateKey 方法使用 IX509PrivateKey 对象和模板(可选)初始化证书请求。 此方法已启用 Web。

语法

HRESULT InitializeFromPrivateKey(
  [in]           X509CertificateEnrollmentContext Context,
  [in]           IX509PrivateKey                  *pPrivateKey,
  [in, optional] BSTR                             strTemplateName
);

参数

[in] Context

一个 X509CertificateEnrollmentContext 枚举值,该值指定请求的证书是面向最终用户、计算机还是代表计算机的管理员。 这可以是以下值之一。 但是,如果设置了私钥MachineContext 属性,则必须指定 ContextMachine 枚举值。

含义
ContextUser
正在为最终用户请求证书。
ContextMachine
正在为计算机请求证书。
ContextAdministratorForceMachine
代表计算机的管理员正在请求证书。

[in] pPrivateKey

指向表示私钥的 IX509PrivateKey 接口的指针。

[in, optional] strTemplateName

一个 BSTR 变量,其中包含模板的公用名 (CN) ,如 Active Directory 中所示或带点的十进制 对象标识符。 这是一个可选参数。

返回值

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

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

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

注解

如果指定模板, InitializeFromPrivateKey 方法将执行以下操作:

  • 将模板指定的扩展添加到 IX509Extensions 集合。
  • 创建 IObjectIds 集合,并使用默认XCN_OID_KEY_USAGE填充该集合,并XCN_OID_BASIC_CONSTRAINTS2对象标识符。 如果模板指示这些 OID 不重要,则它们将从集合中删除。 将添加模板标记为“关键”的 OID。
  • 如果模板支持对称算法,则设置 SmimeCapabilities 属性。
  • 如果模板需要离散签名算法 OID,则设置 AlternateSignatureAlgorithm 属性。
  • 创建 IX509SignatureInformation 对象。
  • 如果在模板中指定了该算法,并在 IX509SignatureInformation 对象上设置该算法,则创建哈希算法 OID。
  • 从模板中检索非对称加密算法 OID(如果存在),并在 IX509SignatureInformation 对象上设置它。
  • 填充模板设置中的许多 IX509PrivateKey 属性。

无论是否指定模板,如果未指定 CSPInformations 属性,该方法将从计算机上安装的提供程序创建 ICspInformations 集合。

此时不会创建私钥。 如果传递给方法的 IX509PrivateKey 对象不表示现有键,则调用 Encode 方法时会创建一个键。 如果未指定任何模板,并且未设置 IX509PrivateKey 上的 ProviderName 属性,则将使用默认提供程序创建密钥。 如果存在私钥,则会在 PrivateKey 属性上设置它。

要求

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

另请参阅

IX509CertificateRequestPkcs10