다음을 통해 공유


샘플 등록 과정 안내

이 문서에서는 가상 스마트 카드 셀프 서비스 등록을 수행하는 데 필요한 단계를 보여줍니다. 사용자가 설정한 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. 서버가 요청을 성공적으로 만들고 클라이언트 /CertificateManagement/api/v1.0/requests/C6BAD97C-F97F-4920-8947-BE980C98C6B5에 요청의 URI를 반환합니다.

  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 응답 본문에 챌린지 응답을 보냅니다. 16진수 챌린지 문자열을 찾아 base64로 변환한 다음 URL에 매개 변수로 전달합니다. URL은 16진수 형식으로 다시 변환해야 하는 다른 응답을 반환합니다.

  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. 클라이언트는 서버에서 받은 응답을 사용하여 원하는 사용자 핀을 설정합니다.

  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"
    }