Solicitar um certificado usando Public CA e um cliente ACME

Neste tutorial, mostramos como solicitar um certificado TLS com a Public Certificate Authority usando a Google Cloud CLI. Para informações sobre as CAs raiz e intermediárias usadas pela Public Certificate Authority, consulte o Google Trust Services. Não há cobrança para solicitar certificados do Public CA, mas as operações do ACME estão sujeitas às cotas de solicitação da AC pública.

Antes de começar

  • Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:

    gcloud init

  • Crie ou selecione um projeto do Google Cloud .

    Papéis necessários para selecionar ou criar um projeto

    • Selecionar um projeto: para selecionar um projeto, não é necessário ter um papel do IAM específico. É possível selecionar qualquer projeto em que você tenha um papel.
    • Criar um projeto: para criar um projeto, é preciso ter o papel de criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.
    • Crie um projeto do Google Cloud :

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud .

  • Verifique se você tem o papel do IAM de Criador de chaves de conta externa da CA pública (roles/publicca.externalAccountKeyCreator).

    Para conceder esse papel, execute o seguinte comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=user:USER \
      --role=roles/publicca.externalAccountKeyCreator
    

    Substitua:

    • PROJECT_ID: ID do projeto do Google Cloud
    • USER: o identificador exclusivo do usuário a quem você quer atribuir o papel do IAM.

    Para saber mais sobre a concessão de um papel do IAM, consulte Gerenciar o acesso a projetos, pastas e organizações.

  • Ative a API Public CA, se ainda não estiver ativada:

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão por meio do papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão por meio do papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    gcloud services enable publicca.googleapis.com

Instalar um cliente

Para começar a usar o Public CA, instale um cliente ACME. As instruções a seguir usam o Certbot como o cliente ACME. É possível usar qualquer outro cliente ACME se ele for compatível com a vinculação de conta externa (EAB, na sigla em inglês).

Para instalar o Certbot, consulte as instruções do Certbot.

Verifique se o cliente está apontando para o servidor do Public CA. Na primeira vez que o cliente ACME interage com o Public CA, ele gera um novo par de chaves e envia a chave pública para a CA pública.

Solicitar um ID de chave EAB e HMAC

Depois de instalar um cliente ACME, registre sua conta ACME na Public CA para solicitar certificados dela. Uma chave secreta de EAB pode ajudar você a registrar sua conta do ACME na CA pública. Uma chave secreta de EAB consiste em um ID de chave e um código de autenticação de mensagem baseado em hash (HMAC).

Use a API Public CA ou a Google Cloud CLI para solicitar um secret de EAB.

Para solicitar um ID de chave EAB e um HMAC, execute o seguinte comando:

gcloud publicca external-account-keys create

Esse comando retorna uma chave secreta de EAB válida no ambiente de produção da Public CA. No corpo da resposta, o campo keyId contém o ID da chave EAB, e o campo b64MacKey contém o HMAC EAB.

Você precisa usar uma chave secreta de EAB em até sete dias após recebê-la. A chave secreta de EAB será invalidada se você não a usar em até sete dias. A conta ACME registrada usando um secret EAB não tem validade.

Registrar uma conta ACME

Nesta seção, explicamos como registrar uma conta ACME na Public CA fornecendo o secret de EAB que você acabou de receber.

Use um cliente ACME comum para registrar uma conta ACME e forneça o ID da chave EAB e o HMAC durante o registro.

Para registrar uma conta ACME com a Public CA e vincular a conta ACME ao projeto do Google Cloud que você usou para solicitar o secret de EAB, execute o seguinte comando:

certbot register \
    --email "EMAIL_ADDRESS" \
    --no-eff-email \
    --server "SERVER" \
    --eab-kid "EAB_KID" \
    --eab-hmac-key "EAB_HMAC_KEY"

Substitua:

  • EMAIL_ADDRESS: seu endereço de email
  • SERVER: o URL do diretório ACME para o ambiente de produção ou de preparo.
  • EAB_KID: o ID da chave EAB
  • EAB_HMAC_KEY: a chave HMAC do EAB.

A tabela a seguir mostra a descrição e o URL do diretório ACME para o ambiente de produção e de preparo:

Ambiente Descrição URL do diretório ACME
Production O ambiente de produção permite que você receba certificados publicamente confiáveis. https://dv.acme-v02.api.pki.goog/directory
Preparo O ambiente de teste retorna certificados que não são publicamente confiáveis. O ambiente de preparo realiza as mesmas verificações de validação que o ambiente de produção. É possível usar o ambiente de teste para integração ou qualquer outro tipo de teste. https://dv.acme-v02.test-api.pki.goog/directory

Só é possível registrar uma conta ACME com uma chave secreta de EAB. Depois de registrar uma conta ACME usando um secret EAB, ele se torna inválido e não pode ser reutilizado. Se você quiser registrar várias contas ACME, solicite um secret EAB exclusivo para cada uma delas.

Solicitar certificados

Depois que a Public CA validar seu controle do destino do certificado e confirmar que o cliente ACME funciona conforme o esperado para realizar operações de gerenciamento de certificados, use os fluxos de trabalho normais do ACME para solicitar, renovar e revogar certificados. É possível realizar essas operações usando o cliente ACME. Para solicitar e renovar um certificado, é preciso concluir um desafio ACME, como o desafio de DNS manual.

Se você usa registros DNS de autorização de autoridade certificadora (CAA, na sigla em inglês) para controlar quais CAs podem emitir certificados para seu domínio, especifique pki.goog como um emissor autorizado, por exemplo, 0 issue "pki.goog". A Public CA também é compatível com extensões de registro CAA para URI de conta e vinculação de método ACME, conforme definido em RFC 8657, que permite restringir a emissão de certificados a uma conta ACME específica usando o parâmetro accounturi e a métodos de validação específicos usando o parâmetro validationmethods.

Para usar o desafio de DNS manual para solicitar um certificado, execute o seguinte comando:

certbot certonly \
    --manual \
    --preferred-challenges "dns-01" \
    --server "SERVER" \
    --domains "DOMAINS"

Substitua:

  • SERVER: o URL do diretório ACME para o ambiente de produção ou de teste.
  • DOMAINS: uma lista separada por vírgulas de domínios para os quais você está solicitando certificados

Limpar

Se você não precisar mais de certificados para seus domínios, exclua o projeto que você criou.

Preparo

É possível usar o ambiente de preparo do Public CA para solicitar certificados para fins de teste. Os certificados emitidos pelo ambiente de preparo se conectam a uma CA raiz de teste. Os certificados do ambiente de preparo não serão considerados confiáveis por navegadores ou outros clientes que não tenham sido configurados para confiar no certificado raiz de preparo. Para obter um secret de EAB válido no ambiente de preparo, substitua o endpoint de API para usar o endpoint do ambiente de preparo:

gcloud config set api_endpoint_overrides/publicca https://preprod-publicca.googleapis.com/
Em seguida, execute o comando de criação de chave de conta para criar uma chave de preparo:
gcloud publicca external-account-keys create
Para reverter para o endpoint do ambiente de produção, execute o seguinte comando:
gcloud config unset api_endpoint_overrides/publicca

Exclua um projeto do Google Cloud :

gcloud projects delete PROJECT_ID

A seguir