範例註冊逐步解說
本文說明執行虛擬智慧卡自助式註冊所需的步驟。 它會顯示具有使用者設定 PIN 的自動核准要求。
用戶端會驗證使用者,然後要求已驗證的使用者可以註冊的設定檔範本清單:
GET /CertificateManagement/api/v1.0/profiletemplates.
用戶端會向使用者顯示產生的清單。 使用者選取名為 「Virtual Smartcard VPN」 和 UUID
97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1
的 vSC (虛擬智慧卡) 設定檔範本。用戶端會使用上一個步驟中傳回的 UUID 來擷取所選設定檔範本的註冊原則:
GET /CertificateManagement/api/v1.0/profiletemplates/97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1/policies/enroll
用戶端會在傳回的原則中分析 DataCollection 欄位,指出出現名為 「要求原因」的單一資料收集專案。 用戶端也會注意到 collectComments 旗標設定為 false,因此不會提示使用者輸入任何專案。
在使用者已輸入要求憑證的原因之後,用戶端會建立要求:
POST /CertificateManagement/api/v1.0/requests { "datacollection":"[{“Request Reason”:”Need VPN Certs”}]", "type":"Enroll", "profiletemplateuuid":"97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1", "comment":"" }
伺服器成功建立要求,並將要求的 URI 傳回給用戶端:
/CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5
。用戶端會呼叫傳回的 URI 來擷取要求物件:
GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5
用戶端會確認要求中的 狀態 屬性已設定為已核准。 要求可能會開始執行。
用戶端會藉由分析 newsmartcarduuid 參數的內容來檢查要求,以查看是否有已與要求相關聯的智慧卡。
由於它只包含空的 GUID,因此用戶端必須使用 MIM CM 尚未使用的現有卡片,或者如果已針對虛擬智慧卡設定設定檔範本,請建立一張卡片。
由於已透過初始查詢可註冊的設定檔範本 (步驟 1) 來向用戶端指示後者,因此用戶端現在必須建立虛擬智慧卡裝置。
用戶端會從設定檔範本擷取智慧卡原則。 它會使用步驟 3 中選取之範本的 UUID:
GET /CertificateManagement/api/v1.0/profiletemplates/97CD65FA-AF4B-4587-9309-0DD6BFD8B4E1/configuration/smartcards
智慧卡原則包含 DefaultAdminKeyHex 屬性中卡片的預設管理者金鑰。 建立智慧卡時,用戶端必須將智慧卡的初始管理金鑰設為此金鑰。
在建立智慧卡裝置時,用戶端必須將它指派給要求:
POST /CertificateManagement/api/v1.0/smartcards { "requestid":" C6BAD97C-F97F-4920-8947-BE980C98C6B5", "cardid":"23CADD5F-020D-4C3B-A5CA-307B7A06F9C9", }
伺服器會以新建立智慧卡物件的 URI 回應用戶端:
api/v1.0/smartcards/D700D97C-F91F-4930-8947-BE980C98A644
。用戶端會擷取智慧卡物件:
GET /CertificateManagement/api/v1.0/smartcards/ D700D97C-F91F-4930-8947-BE980C98A644
藉由檢查在步驟 12 中取得的智慧卡原則中,驗證其值 adminkey 旗標,用戶端知道它必須啟用管理金鑰。
用戶端擷取建議的管理金鑰:
GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/smartcards/D700D97C-F91F-4930-8947-BE980C98A644/diversifiedkey?cardid=23CADD5F-020D-4C3B-A5CA-307B7A06F9C9
用戶端必須以系統管理員身分驗證卡片,才能設定管理金鑰。 若要這樣做,用戶端會從智慧卡要求驗證挑戰,並將它提交至伺服器:
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 會傳回另一個回應,必須轉換成十六進位格式。
伺服器會傳送 HTTP 回應主體中的挑戰回應,用戶端會使用它來擴展管理金鑰。
用戶端注意到使用者必須藉由檢查智慧卡原則中的 UserPinOption 欄位來提供所需的釘選。
在使用者輸入所需的釘選到對話方塊中之後,用戶端會執行步驟 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
用戶端會使用從伺服器收到的回應來設定所需的使用者 PIN。
用戶端現在已經準備好產生憑證要求。 它會查詢設定檔範本憑證產生參數來判斷應如何產生金鑰/要求。
GET /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/certificaterequestgenerationoptions.
伺服器會以單一 JSON 序列化的 CertificateRequestGenerationOptions 物件回應。 物件包含金鑰、憑證易記名稱、雜湊演算法、金鑰演算法、金鑰大小等可匯出性的參數。 用戶端會使用這些參數來產生憑證要求。
單一憑證要求會提交到伺服器。 當憑證範本指定封存 CA 上的憑證時,用戶端可以另外指定用來解密任何 PFX Blob 的 PFX 密碼,也就是 CA 產生金鑰組,然後將它傳送至用戶端。 用戶端也可以選擇加入一些註解。
POST /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5/certificatedata { "pfxpassword":"", "certificaterequests":[ "MIIDZDC…” ] }
幾秒鐘之後,伺服器會以單一 JSON 序列化的 Microsoft.Clm.Shared.Certificate 物件回應。 藉由檢查 isPkcs7 旗標,用戶端會瞭解此回應不是 PFX Blob。 用戶端會藉由解碼 pkcs7 字串的 base64 來擷取 Blob,並加以安裝。
用戶端會將要求標示為已完成。
PUT /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5 { "status":"Completed" }