Chrome Management Certificate Provisioning API용 코드 샘플

API 기능에 관한 개요는 Cert Provisioning API를 참고하세요.

이 페이지의 모든 요청은 다음 변수를 사용합니다.

  • $TOKEN - OAuth2 토큰 또는 자체 서명 JWT
  • $CUSTOMER - 고객의 ID 또는 리터럴 my_customer
  • $CERT_PROVISIONING_PROCESS - 초기 Pub/Sub 메시지에서 인증서 프로비저닝 어댑터로 전송된 인증서 프로비저닝 프로세스의 ID입니다.
  • $OPERATION - 장기 실행 작업의 ID

인증서 프로비저닝 프로세스 가져오기

CertificateProvisioningProcess 리소스를 가져옵니다. 인증서 프로비저닝 프로세스의 상태에 따라 CertificateProvisioningProcess 리소스의 일부 필드만 응답에 채워집니다.

요청

curl -H "Authorization: Bearer $TOKEN" \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS

응답

다음 응답은 클라이언트에게 데이터 서명을 요청하기 전에 생성됩니다.

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS",
  "provisioningProfileId": "43b413f9-5ecd-4bf6-b431-f2df56ce852e",
  "subjectPublicKeyInfo": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqtbosvGe1JzJJYBPsPzFY33xD9fSJhQLZh21ELD2vEZ5OSzxXzQOhlXZ2Mv4C3m4zn8mjuYykprBxaMggryd8kyhycm2DDsL2/KUkdQNPnv6mBQ8iionF84iabh+FWph1CU63j2vCPnw0VYSv7cz+bHsxs3tXFB7PqqQZr7WcWAAxFaIqoTkJrTGMzDFs8GHUA6mFhMj0WsPzp3aicj24uW0AAJjVFmiZ+pz1lOOL4coNsVrujrX2E6lU8AHjmoQT6ThRVnuo1jFXoASB4A1It6dtu/P8L3zhsVWYRtOZjLLVvGryzT8z0A8iW5k+apkb465jgLd2vuxFPekAgPRDwIDAQAB",
  "chromeOsDevice": {
    "deviceDirectoryApiId": "abcdefgh-ijkl-mnop-qrst-uvwxyz0123456",
    "serialNumber": "0123456789"
  },
  "startTime": "2025-03-07T13:38:54.930621Z",
  "genericCaConnection": {
    "caConnectionAdapterConfigReference": "default_ca_config"
  },
  "genericProfile": {
    "profileAdapterConfigReference": "device_profile"
  }
}

인증서 프로비저닝 프로세스 소유권 주장

인증서 프로비저닝 어댑터가 인증서 프로비저닝 프로세스를 주장합니다. 여러 어댑터 인스턴스가 동시에 실행되는 경우 인증서 프로비저닝 프로세스가 동일한 어댑터 인스턴스에서 처리됩니다. 어댑터 인스턴스가 하나만 있는 경우에도 이 단계가 필요합니다.

요청

curl -H "Authorization: Bearer $TOKEN" \
--json '{"callerInstanceId": "adapter_instance_1"}' \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:claim

응답

인증서 프로비저닝 프로세스가 이전에 확인되지 않은 경우 빈 응답이 반환됩니다.

{}

다른 어댑터 인스턴스에서 인증서 프로비저닝 프로세스를 이미 주장한 경우 claim 요청이 400 잘못된 요청 오류와 함께 실패합니다.

소유권 증빙 서명 요청

인증서를 요청하는 클라이언트에게 인증서 프로비저닝 프로세스의 공개 키에 해당하는 비공개 키로 지정된 SignatureAlgorithm을 사용하여 일부 데이터에 서명하도록 요청합니다. $DATA_TO_SIGN는 클라이언트가 서명할 Base64로 인코딩된 데이터를 나타냅니다.

요청

curl -H "Authorization: Bearer $TOKEN" \
--json '{"signData": "$DATA_TO_SIGN","signatureAlgorithm":"SIGNATURE_ALGORITHM_RSA_PKCS1_V1_5_SHA256"}'\
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:signData

응답

응답에는 메타데이터 필드가 SignDataMetadata 프로토 메시지로 채워진 작업이 포함됩니다.

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  }
}

장기 실행 작업 가져오기

SignData 요청에서 반환된 장기 실행 작업의 최신 상태를 가져옵니다.

요청

curl -H "Authorization: Bearer $TOKEN" \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION

응답

Operationmetadata 필드는 SignDataMetadata 프로토 메시지로 채워집니다. 있는 경우 작업의 responseSignDataResponse 프로토 메시지로 채워집니다.

장기 실행 작업이 아직 진행 중인 경우:

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  }
}

장기 실행 작업이 성공적으로 완료된 경우:

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataResponse",
    "certificateProvisioningProcess": {
      "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS",
      "provisioningProfileId": "43b413f9-5ecd-4bf6-b431-f2df56ce852e",
      "subjectPublicKeyInfo": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqtbosvGe1JzJJYBPsPzFY33xD9fSJhQLZh21ELD2vEZ5OSzxXzQOhlXZ2Mv4C3m4zn8mjuYykprBxaMggryd8kyhycm2DDsL2/KUkdQNPnv6mBQ8iionF84iabh+FWph1CU63j2vCPnw0VYSv7cz+bHsxs3tXFB7PqqQZr7WcWAAxFaIqoTkJrTGMzDFs8GHUA6mFhMj0WsPzp3aicj24uW0AAJjVFmiZ+pz1lOOL4coNsVrujrX2E6lU8AHjmoQT6ThRVnuo1jFXoASB4A1It6dtu/P8L3zhsVWYRtOZjLLVvGryzT8z0A8iW5k+apkb465jgLd2vuxFPekAgPRDwIDAQAB",
      "chromeOsDevice": {
        "deviceDirectoryApiId": "abcdefgh-ijkl-mnop-qrst-uvwxyz0123456",
        "serialNumber": "0123456789"
      },
      "startTime": "2025-03-07T13:38:54.930621Z",
      "signData": "ZGF0YSB0byBzaWduCg==",
      "signatureAlgorithm": "SIGNATURE_ALGORITHM_RSA_PKCS1_V1_5_SHA256",
      "signature": "mPfL8v/DR+ZqbtJ6X5cJCTrzfOO3wPHCY8nV/stbokdNZnkRJ8U0PBzgm6pWy08pMmOfrs9ZMBXcQ0i05Oe6AwgHYYN5RHuwdnhAklJYriDT4fXdzewD6KuA6x7ZX1d2xYnh0p2XczcdNOJsrz2T/p+89PLcB6I1PIg1Cwz4I1YCAS2OMAQF5DxS+SvMpPbkdzkNG4SCCL/hJNayxRMr98SbQ0aQE77AtxzpXGof5cBEBOcbQ+T+kBIgArQ87D6bQVHVB3di+TvYepK6hwxiLbhCEDGHgi2DfMp8kEWnAVPVzi6xht5jPNhVqILALRbQQ1nUjlP8UO+/y+WR4M36Yg==",
      "genericCaConnection": {
        "caConnectionAdapterConfigReference": "default_ca_config"
      },
      "genericProfile": {
        "profileAdapterConfigReference": "device_profile"
      }
    }
  }
}

장기 실행 작업이 실패한 경우:

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  },
  "done": true,
  "error": {
    "code": 3,
    "message": "The requested SignData LRO failed because the corresponding certificate provisioning process is in failure state CERTIFICATE_PROVISIONING_RESULT_ERROR_INVALID_SIGNATURE with the following error message: The proof of possession signature is invalid. [operationId=$OPERATION, cppId=$CERT_PROVISIONING_PROCESS, customerId=$CUSTOMER]"
  }
}

인증서 업로드

PEM 형식의 X.509 인증서를 업로드합니다. 샘플 요청에서 PEM 인코딩 인증서는 $CERTIFICATE_IN_PEM_FORMAT 변수로 표시됩니다.

요청

curl -H "Authorization: Bearer $TOKEN" \
--json '{"certificatePem": "$CERTIFICATE_IN_PEM_FORMAT"}' \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:uploadCertificate

응답

{}

인증서 프로비저닝 프로세스 실패 신고

인증서 프로비저닝 프로세스를 실패로 표시하고 적절한 오류 메시지를 설정합니다. 오류 메시지는 인증서 프로비저닝 프로세스를 시작한 ChromeOS 클라이언트로 전파됩니다.

요청

curl -H "Authorization: Bearer $TOKEN" \
--json '{"errorMessage": "The CA could not issue the certificate."}' \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:setFailure

응답

{}