다음을 통해 공유


샘플 등록 연습

이 문서에서는 가상 스마트 카드 셀프 서비스 등록을 수행하는 데 필요한 단계를 보여줍니다. 사용자가 설정한 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단계에서 얻은 스마트 카드 정책에서 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. 클라이언트가 서버로부터 받은 응답을 사용하여 원하는 사용자 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 문자열을 디코딩하여 blob을 추출하고 설치합니다.

  28. 클라이언트는 요청을 완료된 것으로 표시합니다.

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