enrollNestedCMC

enrollNestedCMC 示例从文件中读取现有 CMC 证书请求,将其包装在另一个 CMC 请求中,对此外部请求进行签名,将其提交到证书颁发机构 (CA) ,并将 CA 的证书响应保存到文件中。

位置

) 安装 Microsoft Windows 软件开发工具包 (SDK 时,该示例默认安装在 %ProgramFiles%\Microsoft SDKs\Windows\v7.0\Samples\X509 Certificate Enrollment\VC\enrollNestedCMC 文件夹中。

讨论 (Discussion)

enrollNestedCMC 示例:

  1. 处理以下命令行参数:
    • 输入文件的名称。
    • 输出文件的名称。
    • 可选的请求模板。
  2. 从文件中以 base63 编码的字节数组的形式读取现有 CMC 请求,将字节数组转换为 BSTR,创建 IX509CertificateRequestCmc 对象,并使用 BSTR 初始化请求对象。 初始化的对象将成为内部请求。
  3. 使用在上一步中创建并初始化的内部请求对象初始化另一个 CMC 请求。
  4. 检索现有签名证书,如果找不到签名证书,则从命令行上指定的模板创建证书请求并尝试注册该证书。 findCertByTemplate 和 enrollCertByTemplate 函数在 enrollCommon.cpp 中定义。
  5. 从外部 CMC 请求检索 ISignerCertificates 集合,创建新的 ISignerCertificate 对象,使用检索到的签名证书对其进行初始化,并将其添加到集合中。
  6. 使用 可辨别编码规则 (DER) 对 CMC 请求进行编码,并将请求作为 BSTR 检索。
  7. 创建 ICertConfig 对象,并使用它来检索包含 CA 配置的字符串。
  8. 创建 CryptoAPI ICertRequest2 对象,并使用该对象以及包含 CA 配置和证书请求的字符串将请求提交到 CA。
  9. 检查注册过程的状态,并将 CA 的证书响应保存到文件中。 EncodeToFileW 函数在 enrollCommon.cpp 中定义。

CMC 请求

使用包含的示例