示例注册演练

本文介绍执行虚拟智能卡自助注册所需的步骤。 它介绍了使用用户设置的 PIN 自动批准的请求。

  1. 客户端对用户进行身份验证,然后请求经过身份验证的用户可以注册的配置文件模板的列表:

    GET /CertificateManagement/api/v1.0/profiletemplates.
    
  2. 客户端向用户显示生成的列表。 用户选择名为“虚拟智能卡 VPN”和 UUID 97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1的 vSC (虚拟智能卡) 配置文件模板。

  3. 客户端通过使用上一步中返回的 UUID 检索所选配置文件模板的注册策略:

    GET /CertificateManagement/api/v1.0/profiletemplates/97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1/policies/enroll
    
  4. 客户端分析返回的策略中的 DataCollection 字段,并注意到显示名为“请求原因”的单个数据收集项。 客户端还注意到 collectComments 标志设置为 false,因此不会提示用户输入任何。

  5. 用户输入要求证书的原因后,客户端将创建一个请求:

    POST /CertificateManagement/api/v1.0/requests
    
    {
        "datacollection":"[{“Request Reason”:”Need VPN Certs”}]",
        "type":"Enroll",
        "profiletemplateuuid":"97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1",
        "comment":""
    }
    
  6. 服务器成功创建请求并将请求的 URI 返回到客户端: /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5

  7. 客户端通过调用返回的 URI 检索请求对象:

    GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5
    
  8. 客户端验证请求中的 状态 属性是否设置为“已批准”。 请求执行可能会开始。

  9. 客户端通过分析 newsmartcarduuid 参数的内容,检查请求中是否存在与该请求关联的智能卡。

  10. 由于它只包含一个空 GUID,因此客户端必须使用 MIM CM 尚未使用的现有卡,或者在为虚拟智能卡配置配置文件模板时创建一个。

  11. 因为后一种情况已通过可注册配置文件模板的初始查询(第 1 步)向客户端指明,所以客户端现在必须创建虚拟智能卡设备。

  12. 客户端从配置文件模板检索智能卡策略。 它使用步骤 3 中选择的模板的 UUID:

    GET /CertificateManagement/api/v1.0/profiletemplates/97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1/configuration/smartcards
    
  13. 智能卡策略包含 DefaultAdminKeyHex 属性中卡的默认管理密钥。 创建智能卡时,客户端必须将智能卡的初始管理密钥设置为此密钥。

  14. 创建智能卡设备后,客户端必须将它分配给请求:

    POST /CertificateManagement/api/v1.0/smartcards
    
    {
        "requestid":" C6BAD97C-F97F-4920-8947-BE980C98C6B5",
        "cardid":"23CADD5F-020D-4C3B-A5CA-307B7A06F9C9",
    }
    
  15. 服务器使用新创建的智能卡对象的 URI 响应客户端: api/v1.0/smartcards/D700D97C-F91F-4930-8947-BE980C98A644

  16. 客户端检索智能卡对象:

    GET /CertificateManagement/api/v1.0/smartcards/ D700D97C-F91F-4930-8947-BE980C98A644
    
  17. 通过检查步骤 12 中获取的智能卡策略中 多样化adminkey 标志的值,客户端知道它必须使管理密钥多样化。

  18. 客户端检索建议的管理密钥:

    GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/smartcards/D700D97C-F91F-4930-8947-BE980C98A644/diversifiedkey?cardid=23CADD5F-020D-4C3B-A5CA-307B7A06F9C9
    
  19. 客户端必须将该卡验证为管理员,才能设置管理密钥。 为此,客户端请求从智能卡中获取身份验证质询,并将它提交到服务器:

    GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/smartcards/D700D97C-F91F-4930-8947-BE980C98A644/authenticationresponse?cardid=23CADD5F-020D-4C3B-A5CA-307B7A06F9C9&challenge=CFAA62118BBD25&diversified=false
    

    服务器在 HTTP 响应正文中发送质询响应。 找到十六进制质询字符串,将它转换为 base64,再将它作为 URL 参数进行传递。 URL 返回另一个响应,该响应必须转换回十六进制格式。

  20. 服务器发送 HTTP 响应正文中的质询响应,并且客户端使用它来使管理密钥多样化。

  21. 客户端指出,用户必须通过检查智能卡策略中的 UserPinOption 字段来提供所需的 PIN。

  22. 当用户在对话中输入所需的 PIN 后,客户端将执行步骤 19 中所述的质询-响应身份验证,唯一的区别是,现在应将多元化标志设置为 true:

    GET /CertificateManagement/api/v1.0/ requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/smartcards/D700D97C-F91F-4930-8947-BE980C98A644/authenticationresponse?cardid=23CADD5F-020D-4C3B-A5CA-307B7A06F9C9&challenge=CFAA62118BBD25&diversified=true
    
  23. 客户端使用从服务器收到的响应来设置所需的用户 pin。

  24. 客户端现在就可以生成证书请求。 它将查询配置文件模板证书生成参数,以确定应如何生成密钥/请求。

    GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/certificaterequestgenerationoptions.
    
  25. 服务器使用单个 JSON 序列化的 CertificateRequestGenerationOptions 对象进行响应。 对象包括密钥的可导出性参数、证书友好名称、哈希算法、密钥算法、密钥大小等。 客户端使用这些参数来生成证书请求。

  26. 将单个证书请求提交到服务器。 当证书模板指定在 CA 上存档证书时,客户端还可以指定一个 PFX 密码,该密码应该用于解密任何 PFX Blob,即 CA 生成密钥对,然后将其发送到客户端。 客户端还可以选择添加一些注释。

    POST /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/certificatedata
    
    {
       "pfxpassword":"",
       "certificaterequests":[
           "MIIDZDC…”
        ]
    }   
    
  27. 几秒钟后,服务器将使用单个 JSON 序列化的 Microsoft.Clm.Shared.Certificate 对象进行响应。 通过检查 isPkcs7 标志,客户端了解到此响应不是 PFX Blob。 客户端通过对 pkcs7 字符串进行 base64 解码来提取 Blob 并安装它。

  28. 客户端将请求标记为已完成。

    PUT /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5
    
    {
        "status":"Completed"
    }