Criar um pool de CA

Nesta página, descrevemos como criar pools de autoridade de certificação (CA).

Um pool de ACs é uma coleção de várias ACs com uma política de emissão de certificados e uma política do Identity and Access Management (IAM) comuns. Um pool de CAs facilita o gerenciamento da rotação de CAs e permite alcançar um total maior de consultas efetivas por segundo (QPS).

É preciso criar um pool de CAs antes de usar o Certificate Authority Service para criar uma CA. Para mais informações, consulte Visão geral dos pools de AC.

Antes de começar

Verifique se você tem o papel do IAM de gerente de operações do serviço de CA (roles/privateca.caManager). Para informações sobre como conceder um IAM a um principal, consulte Conceder um único papel.

Decidir as configurações do pool de CAs

Esta seção descreve as configurações de um pool de CA e fornece recomendações para decidir as configurações.

Configurações permanentes do pool de ACs

As seguintes configurações do pool de CA não podem ser alteradas depois da criação do pool.

Local
Especifique o local do pool de CAs. Um pool de CAs é armazenado em um único localGoogle Cloud . Recomendamos que você crie o pool de autoridades certificadoras no mesmo local ou perto de onde pretende usá-lo.
Para conferir a lista completa de locais compatíveis, consulte Locais.
Nível
Escolha se você quer criar o pool de AC com o DevOps ou o nível Enterprise. Essa escolha afeta se o serviço de CA mantém os certificados criados, se eles podem ser revogados posteriormente e a taxa máxima em que é possível criar certificados das CAs no pool de CAs. Para mais informações, consulte Selecionar os níveis de operação.

Configurações opcionais do pool de CAs

Política de emissão de certificados

Um pool de CAs pode ter uma política de emissão de certificados. Essa política de emissão impõe restrições aos certificados que as CAs no pool podem emitir. É possível atualizar a política de emissão de um pool de ACs depois de criar o pool. Para mais informações, consulte Visão geral dos modelos e das políticas de emissão.

Para mais informações sobre como configurar uma política de emissão de certificado, consulte Adicionar uma política de emissão de certificado a um pool de CAs.

Opções de publicação

É possível configurar um pool de CAs para publicar os certificados de cada uma delas. Ao emitir um certificado, o URL do certificado de CA é incluído no certificado como uma extensão de acesso a informações de autoridade (AIA).

As CAs em pools de CA de nível Enterprise podem ser autorizadas a publicar listas de revogação de certificados (CRLs) no bucket associado do Cloud Storage. Ao emitir um certificado, um URL para essa CRL é incluído no certificado como a extensão de ponto de distribuição de CRL (CDP). Não é possível encontrar a CRL sem a extensão CDP no certificado. Para mais informações, consulte Revogar certificados.

Também é possível selecionar o formato de codificação dos certificados de CA e das CRLs publicadas. Os formatos de codificação aceitos são Privacy Enhanced Mail (PEM) e Distinguished Encoding Rules (DER). Se um formato de codificação não for especificado, o PEM será usado.

Se você criar o pool de CAs usando a Google Cloud CLI ou o console Google Cloud , o serviço de CA vai ativar essas opções de publicação por padrão. Para mais informações, consulte Desativar a publicação de certificados de CA e CRLs para CAs em um pool de CAs.

Criar um pool de CA

Para criar um pool de CAs, siga estas instruções:

Console

Escolher um nome para o pool de CAs

  1. Acesse a página Serviço de autoridade certificadora no Google Cloud console.

    Acesse Certificate Authority Service

  2. Clique em Gerenciador de pools de CA.

  3. Clique em Criar pool.

  4. Adicione um nome exclusivo para a região.

  5. Selecione uma região no menu suspenso do campo Região. Para mais informações, consulte Escolher o melhor local.

  6. Selecione o nível Enterprise ou DevOps. Para mais informações, consulte Selecionar os níveis de operação.

  7. Clique em Próxima.

Configurar algoritmos e tamanhos de chave permitidos

Com o CA Service, é possível escolher os algoritmos de assinatura para as chaves do Cloud KMS que oferecem suporte às CAs no pool de CAs. Por padrão, todos os algoritmos de chave são permitidos.

Para restringir as chaves permitidas nos certificados emitidos pelo pool de CAs, faça o seguinte: Esse procedimento é opcional.

  1. Clique no botão.
  2. Clique em Adicionar um item.
  3. Na lista Tipo, selecione o tipo de chave.

    Se você quiser usar chaves RSA, faça o seguinte:

    1. Opcional: adicione o tamanho mínimo do módulo em bits.
    2. Opcional: adicione o tamanho máximo do módulo em bits.
    3. Clique em Concluído.

    Se você quiser usar chaves de curva elíptica, faça o seguinte:

    1. Opcional: na lista Tipo de curva elíptica, selecione o tipo de curva elíptica.
    2. Clique em Concluído.
  4. Para adicionar outra chave permitida, clique em Adicionar um item e repita a etapa 2.

  5. Clique em Próxima.

Configurar métodos de solicitação de certificado

Para limitar os métodos que os solicitantes de certificados podem usar para pedir certificados do pool de CA, faça o seguinte:

  1. Opcional: para restringir solicitações de certificado com base em CSR, clique na chave.
  2. Opcional: para restringir solicitações de certificado com base em configuração, clique no botão.

Configurar opções de publicação

Para configurar as opções de publicação, faça o seguinte:

  1. Opcional: para não permitir a publicação de certificados de CA no bucket do Cloud Storage para as CAs no pool de CAs, clique na chave.
  2. Opcional: para não permitir a publicação de CRLs no bucket do Cloud Storage para as CAs no pool de CAs, clique na chave.
  3. Clique no menu para selecionar o formato de codificação dos certificados de CA e das CRLs publicadas.

    Configure as opções de publicação para certificados de CA e CRLs para as CAs no pool de CA.

  4. Clique em Próxima.

Definir o uso da chave base

Essa configuração se refere ao campo Key Usage em um certificado digital. Ele especifica como a chave privada do certificado pode ser usada, como criptografia de chave, criptografia de dados, assinatura de certificado e assinatura de CRL. Para mais informações, consulte Uso da chave.

  1. Para selecionar os usos de chave base, clique na chave Especificar usos de chave base para certificados emitidos neste pool de CAs e escolha entre as opções listadas.
  2. Clique em Próxima.
Definir o uso estendido de chave

Essa configuração se refere ao campo Extended Key Usage (EKU) em um certificado digital. Ela oferece restrições mais específicas e refinadas sobre como a chave pode ser usada, como para autenticação de servidor e cliente, assinatura de código e proteção de e-mail. Para mais informações, consulte Uso prolongado da chave.

Os usos de chave estendidos são definidos usando identificadores de objeto (OIDs, na sigla em inglês). Se você não configurar os usos estendidos de chave, todos os cenários de uso de chave serão permitidos.

  1. Para selecionar os usos estendidos de chave, clique na opção Gravar usos estendidos de chave para certificados emitidos neste pool de CAs e escolha entre as opções listadas.
  2. Clique em Próxima.
Definir identificadores de política

A extensão de políticas do certificado expressa as políticas seguidas pelo pool de CAs emissoras. Essa extensão pode incluir informações sobre como as identidades são validadas antes da emissão do certificado, como os certificados são revogados e como a integridade do pool de CAs é garantida. Essa extensão ajuda você a verificar os certificados emitidos pelo pool de CAs e ver como eles são usados.

Para mais informações, consulte Políticas de certificado.

Para especificar a política que define o uso do certificado, faça o seguinte:

  1. Adicione o identificador da política no campo Identificadores de política.
  2. Clique em Próxima.
Adicionar servidores OCSP de acesso a informações de autoridade (AIA)

A extensão AIA em um certificado fornece as seguintes informações:

  • Endereço dos servidores OCSP em que é possível verificar o status de revogação do certificado.
  • O método de acesso do emissor do certificado.

Para mais informações, consulte Acesso às informações da autoridade.

Para adicionar os servidores OCSP que aparecem no campo de extensão AIA dos certificados, faça o seguinte:

  1. Clique em Adicionar item.
  2. No campo URL do servidor, adicione o URL do servidor OCSP.
  3. Clique em Concluído.
  4. Clique em Próxima.
Opções de CA

O campo Opções de CA em um modelo de certificado define como o certificado resultante pode ser usado em uma hierarquia de autoridade de certificação (CA). As opções de CA determinam se um certificado pode ser usado para assinar outros certificados e, em caso afirmativo, as restrições nos certificados emitidos.

Escolha entre as opções a seguir:

  1. Inclua as configurações para descrever as extensões X.509 da CA: especifique as configurações em um modelo de certificado que controlam as extensões X.509.

  2. Restrinja os certificados emitidos para que sejam usados apenas para CAs: essa opção só aparece se você marcar a caixa de seleção mencionada na etapa anterior. Esse valor booleano indica se o certificado é de uma CA. Se definido como true, o certificado poderá ser usado para assinar outros certificados. Se false, o certificado é de entidade final e não pode assinar outros certificados. Se você clicar nesse botão, será solicitado a definir restrições de nome para a extensão em certificados de CA.

  3. Inclua as configurações para descrever as extensões de restrição de tamanho do caminho do X.509: especifique as configurações que controlam o tamanho de uma cadeia de certificados, originada de um certificado específico. Se o tamanho máximo do caminho do emissor for definido como 0, a CA só poderá emitir certificados de entidade final. Se estiver definido como 1, a cadeia abaixo desse certificado de CA poderá incluir apenas uma CA subordinada. Se um valor não for declarado, o número de CAs subordinadas na cadeia abaixo dessa CA será ilimitado.

  4. Clique em Próxima.
Configurar outras extensões

Para configurar outras extensões personalizadas a serem incluídas nos certificados emitidos pelo pool de CAs, faça o seguinte:

  1. Clique em Adicionar item.
  2. No campo Identificador de objeto, adicione um identificador de objeto válido formatado como dígitos separados por pontos.
  3. No campo Valor, adicione o valor codificado em base64 do identificador.
  4. Se a extensão for essencial, selecione A extensão é essencial.

Para salvar todas as configurações de valor de referência, clique em Concluído.

Para criar o pool de CA, clique em Concluído.

gcloud

Execute este comando:

gcloud privateca pools create POOL_NAME --location=LOCATION

Substitua:

  • POOL_NAME: o nome do pool de ACs.
  • LOCATION: o local onde você quer criar o pool de ACs. Para a lista completa de locais, consulte Locais.

Se você não especificar qual nível quer para seu pool de ACs, o nível Enterprise será selecionado por padrão. Se você quiser especificar a camada do seu pool de CA, execute o seguinte comando gcloud:

gcloud privateca pools create POOL_NAME --location=LOCATION --tier=TIER_NAME

Substitua:

  • POOL_NAME: o nome do pool de ACs.
  • LOCATION: o local onde você quer criar o pool de ACs. Para a lista completa de locais, consulte Locais.
  • TIER_NAME: devops ou enterprise. Para mais informações, consulte Selecionar os níveis de operação.

Se você não especificar o formato de codificação de publicação para seu pool de CA, o formato PEM será selecionado por padrão. Se você quiser especificar o formato de codificação de publicação para seu pool de CA, execute o seguinte comando gcloud:

gcloud privateca pools create POOL_NAME --location=LOCATION --publishing-encoding-format=PUBLISHING_ENCODING_FORMAT

Substitua:

  • POOL_NAME: o nome do pool de ACs.
  • LOCATION: o local onde você quer criar o pool de ACs. Para a lista completa de locais, consulte Locais.
  • PUBLISHING_ENCODING_FORMAT: PEM ou DER.

Para mais informações sobre o comando gcloud privateca pools create, consulte gcloud privateca pools create.

Para informações sobre como restringir o tipo de certificado que um pool de ACs pode emitir, consulte Adicionar uma política de emissão de certificado a um pool de ACs.

Terraform

resource "google_privateca_ca_pool" "default" {
  name     = "ca-pool"
  location = "us-central1"
  tier     = "ENTERPRISE"
  publishing_options {
    publish_ca_cert = true
    publish_crl     = true
  }
  labels = {
    foo = "bar"
  }
}

Go

Para autenticar no serviço de CA, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import (
	"context"
	"fmt"
	"io"

	privateca "cloud.google.com/go/security/privateca/apiv1"
	"cloud.google.com/go/security/privateca/apiv1/privatecapb"
)

// Create a Certificate Authority pool. All certificates created under this CA pool will
// follow the same issuance policy, IAM policies, etc.
func createCaPool(w io.Writer, projectId string, location string, caPoolId string) error {
	// projectId := "your_project_id"
	// location := "us-central1"	// For a list of locations, see: https://cloud.google.com/certificate-authority-service/docs/locations.
	// caPoolId := "ca-pool-id"		// A unique id/name for the ca pool.

	ctx := context.Background()
	caClient, err := privateca.NewCertificateAuthorityClient(ctx)
	if err != nil {
		return fmt.Errorf("NewCertificateAuthorityClient creation failed: %w", err)
	}
	defer caClient.Close()

	caPool := &privatecapb.CaPool{
		// Set the tier (see: https://cloud.google.com/certificate-authority-service/docs/tiers).
		Tier: privatecapb.CaPool_ENTERPRISE,
	}

	locationPath := fmt.Sprintf("projects/%s/locations/%s", projectId, location)

	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#CreateCaPoolRequest.
	req := &privatecapb.CreateCaPoolRequest{
		Parent:   locationPath,
		CaPoolId: caPoolId,
		CaPool:   caPool,
	}

	op, err := caClient.CreateCaPool(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateCaPool failed: %w", err)
	}

	if _, err = op.Wait(ctx); err != nil {
		return fmt.Errorf("CreateCaPool failed during wait: %w", err)
	}

	fmt.Fprintf(w, "CA Pool created")

	return nil
}

Java

Para autenticar no serviço de CA, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


import com.google.api.core.ApiFuture;
import com.google.cloud.security.privateca.v1.CaPool;
import com.google.cloud.security.privateca.v1.CaPool.IssuancePolicy;
import com.google.cloud.security.privateca.v1.CaPool.Tier;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import com.google.cloud.security.privateca.v1.CertificateIdentityConstraints;
import com.google.cloud.security.privateca.v1.CreateCaPoolRequest;
import com.google.cloud.security.privateca.v1.LocationName;
import com.google.longrunning.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateCaPool {

  public static void main(String[] args)
      throws InterruptedException, ExecutionException, IOException {
    // TODO(developer): Replace these variables before running the sample.
    // location: For a list of locations, see:
    // https://cloud.google.com/certificate-authority-service/docs/locations
    // poolId: Set a unique poolId for the CA pool.
    String project = "your-project-id";
    String location = "ca-location";
    String poolId = "ca-pool-id";
    createCaPool(project, location, poolId);
  }

  // Create a Certificate Authority Pool. All certificates created under this CA pool will
  // follow the same issuance policy, IAM policies,etc.,
  public static void createCaPool(String project, String location, String poolId)
      throws InterruptedException, ExecutionException, IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `certificateAuthorityServiceClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (CertificateAuthorityServiceClient certificateAuthorityServiceClient =
        CertificateAuthorityServiceClient.create()) {

      IssuancePolicy issuancePolicy = IssuancePolicy.newBuilder()
          .setIdentityConstraints(CertificateIdentityConstraints.newBuilder()
              .setAllowSubjectPassthrough(true)
              .setAllowSubjectAltNamesPassthrough(true)
              .build())
          .build();

      /* Create the pool request
        Set Parent which denotes the project id and location.
        Set the Tier (see: https://cloud.google.com/certificate-authority-service/docs/tiers).
      */
      CreateCaPoolRequest caPoolRequest =
          CreateCaPoolRequest.newBuilder()
              .setParent(LocationName.of(project, location).toString())
              .setCaPoolId(poolId)
              .setCaPool(
                  CaPool.newBuilder()
                      .setIssuancePolicy(issuancePolicy)
                      .setTier(Tier.ENTERPRISE)
                      .build())
              .build();

      // Create the CA pool.
      ApiFuture<Operation> futureCall =
          certificateAuthorityServiceClient.createCaPoolCallable().futureCall(caPoolRequest);
      Operation response = futureCall.get();

      if (response.hasError()) {
        System.out.println("Error while creating CA pool !" + response.getError());
        return;
      }

      System.out.println("CA pool created successfully: " + poolId);
    }
  }
}

Python

Para autenticar no serviço de CA, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import google.cloud.security.privateca_v1 as privateca_v1


def create_ca_pool(project_id: str, location: str, ca_pool_name: str) -> None:
    """
    Create a Certificate Authority pool. All certificates created under this CA pool will
    follow the same issuance policy, IAM policies,etc.,

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        location: location you want to use. For a list of locations, see: https://cloud.google.com/certificate-authority-service/docs/locations.
        ca_pool_name: a unique name for the ca pool.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()

    ca_pool = privateca_v1.CaPool(
        # Set the tier (see: https://cloud.google.com/certificate-authority-service/docs/tiers).
        tier=privateca_v1.CaPool.Tier.ENTERPRISE,
    )
    location_path = caServiceClient.common_location_path(project_id, location)

    # Create the pool request.
    request = privateca_v1.CreateCaPoolRequest(
        parent=location_path,
        ca_pool_id=ca_pool_name,
        ca_pool=ca_pool,
    )

    # Create the CA pool.
    operation = caServiceClient.create_ca_pool(request=request)

    print("Operation result:", operation.result())

API REST

  1. Crie um pool de CA.

    Método HTTP e URL:

    POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools\?ca_pool_id=POOL_ID

    Corpo JSON da solicitação:

    {
      "tier": "ENTERPRISE"
    }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
        "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID",
        "metadata": {...},
        "done": false
    }
    

  2. Pesquise a operação até que ela seja concluída.

    A operação será concluída quando a propriedade done da operação de longa duração for definida como true.

    Método HTTP e URL:

    GET https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
        "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID",
        "metadata": {...},
        "done": true,
        "response": {
          "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CaPool",
          "name": "...",
          "tier": "ENTERPRISE"
        }
    }
    

Adicionar ou atualizar rótulos em um pool de CAs

Um rótulo é um par de chave-valor que ajuda a organizar seus recursos do CA Service. É possível filtrar os recursos com base nos rótulos.

Para adicionar ou atualizar rótulos em um pool de CAs, faça o seguinte:

Console

Para adicionar um rótulo, faça o seguinte:

  1. Acesse a página Certificate Authority Service.

    Acesse Certificate Authority Service

  2. Na guia Gerenciador de pools de CA, selecione o pool de CA.

  3. Clique em Marcadores.

  4. Clique em Adicionar marcador.

  5. Adicione um par de chave-valor.

  6. Clique em Salvar.

    Adicione um rótulo a um pool de CAs atual.

Para editar um rótulo, faça o seguinte:

  1. Acesse a página Certificate Authority Service.

    Acesse Certificate Authority Service

  2. Na guia Gerenciador de pools de CA, selecione o pool de CA.

  3. Clique em Marcadores.

  4. Edite o valor do marcador.

  5. Clique em Salvar.

gcloud

Execute este comando:

gcloud privateca pools update POOL_ID --location=LOCATION --update-labels foo=bar

Substitua:

  • POOL_ID: o nome do pool de ACs.
  • LOCATION: o local do pool de ACs. Para a lista completa de locais, consulte Locais.

A seguir