註冊範例逐步解說

本文說明執行虛擬智慧卡自助式註冊所需的步驟。 它會顯示具有使用者設定 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 密碼,以用來解密任何 PFX blob,也就是說,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"
    }