Exemplos de código para a API Chrome Management Certificate Provisioning

Acesse a API Cert Provisioning para ter uma visão geral dos recursos da API.

Todas as solicitações nesta página usam as seguintes variáveis:

  • $TOKEN: token OAuth2 ou JWT autoassinado
  • $CUSTOMER: o ID do cliente ou my_customer literal.
  • $CERT_PROVISIONING_PROCESS: o ID do processo de provisionamento do certificado que foi transmitido ao adaptador de provisionamento do certificado na mensagem inicial do Pub/Sub.
  • $OPERATION: ID da operação de longa duração

Receber um processo de provisionamento de certificado

Receba um recurso CertificateProvisioningProcess. Dependendo do estado do processo de provisionamento do certificado, nem todos os campos do recurso CertificateProvisioningProcess são preenchidos na resposta.

Solicitação

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

Resposta

A resposta a seguir é gerada antes que o cliente seja solicitado a assinar dados.

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

Reivindicar um processo de provisionamento de certificado

Um adaptador de provisionamento de certificado reivindica um processo de provisionamento de certificado. Se várias instâncias do adaptador estiverem em execução em paralelo, isso garante que o processo de provisionamento de certificado seja processado pela mesma instância do adaptador. Essa etapa também é necessária se houver apenas uma instância do adaptador.

Solicitação

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

Resposta

Se o processo de provisionamento de certificado não tiver sido reivindicado antes, uma resposta vazia será retornada.

{}

Se o processo de provisionamento de certificado já tiver sido reivindicado por outra instância do adaptador, a solicitação claim vai falhar com um erro 400 de solicitação inválida.

Solicitar um comprovante de assinatura de posse

Solicitar ao cliente que solicite um certificado para assinar alguns dados usando o SignatureAlgorithm especificado com a chave privada correspondente à chave pública no processo de provisionamento do certificado. O $DATA_TO_SIGN representa os dados codificados em Base64 a ser assinados pelo cliente.

Solicitação

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

Resposta

A resposta contém uma operação com o campo de metadados sendo preenchido com uma mensagem proto 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"
  }
}

Acessar a operação de longa duração

Receber o estado mais recente de uma operação de longa duração retornada da solicitação SignData.

Solicitação

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

Resposta

O campo metadata de uma operação é preenchido com uma mensagem SignDataMetadata proto. Se presente, o response de uma operação é preenchido com uma mensagem SignDataResponse proto.

Caso a operação de longa duração ainda esteja em andamento:

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

Caso a operação de longa duração tenha sido concluída:

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

Caso a operação de longa duração tenha falhado:

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

Fazer upload de um certificado

Faça upload do certificado X.509 no formato PEM. Na solicitação de exemplo, o certificado codificado em PEM é indicado pela variável $CERTIFICATE_IN_PEM_FORMAT.

Solicitação

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

Resposta

{}

Informar uma falha no processo de provisionamento de certificados

Marque um processo de provisionamento de certificado como com falha e defina uma mensagem de erro adequada. A mensagem de erro é propagada para o cliente do ChromeOS que iniciou o processo de provisionamento do certificado.

Solicitação

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

Resposta

{}