示例注册演练

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

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

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

  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中获得的智能卡策略中的 diversifyadminkey 标志的值,客户端知道它必须多元化管理密钥。

  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 blob 的 PFX 密码,即 CA 生成密钥对,然后将其发送到客户端。 客户端还可以选择添加一些注释。

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

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

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