共用方式為


範例註冊逐步解說

本文說明執行虛擬智慧卡自助式註冊所需的步驟。 它會顯示具有使用者設定 PIN 的自動核准要求。

  1. 用戶端會驗證使用者,然後要求已驗證的使用者可以註冊的設定檔範本清單:

    GET /CertificateManagement/api/v1.0/profiletemplates.
    
  2. 用戶端會向使用者顯示產生的清單。 使用者選取名為 「Virtual Smartcard 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 欄位來提供所需的釘選。

  22. 在使用者輸入所需的釘選到對話方塊中之後,用戶端會執行步驟 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 序列化的 Microsoft.Clm.Shared.Certificate 物件回應。 藉由檢查 isPkcs7 旗標,用戶端會瞭解此回應不是 PFX Blob。 用戶端會藉由解碼 pkcs7 字串的 base64 來擷取 Blob,並加以安裝。

  28. 用戶端會將要求標示為已完成。

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