Criar um modelo de certificado

Nesta página, descrevemos os atributos de um modelo de certificado e explicamos como criar um. Para saber mais sobre modelos de certificado, consulte Sobre modelos de certificado.

Funções exigidas

Para receber as permissões necessárias para criar um modelo de certificado, peça ao administrador para conceder a você o papel do IAM Gerente de operações do serviço de CA (roles/privateca.caManager) no projeto, na pasta ou na organização. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Criar um modelo de certificado

Para criar um modelo de certificado, use um dos seguintes métodos:

Console

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

    Acesse Certificate Authority Service

  2. Clique na guia Gerenciador de modelos e em Criar modelo.

  3. Selecione um local para o modelo de certificado usando a lista Região. Ele precisa estar no mesmo local do pool de CAs que você pretende usar com o modelo de certificado.

  4. Insira um identificador exclusivo para o modelo de certificado no campo ID do modelo de certificado. Se quiser, forneça uma descrição para o modelo de certificado.

  5. Clique em Próxima.

  6. Se quiser configurar valores padrão de x.509 para certificados que usam esse modelo, clique na chave Incluir valores predefinidos em certificados emitidos com este modelo de certificado. Em seguida, clique em Configurar valores predefinidos.

  7. Configure os valores predefinidos usando as seguintes informações:

    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. Ele 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, proteção de e-mail e muito mais. Para mais informações, consulte Uso estendido 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 de chave estendidos, clique na opção Gravar usos de chave estendidos 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 emissor. 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 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. Opcional: 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.

    A adição de servidores OCSP é opcional. Para adicionar os servidores OCSP que aparecem no campo de extensão AIA nos 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 certificadora (CA). Ela determina essencialmente 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 controla 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 for false, ele será um certificado de entidade final e não poderá 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.Ela especifica o número máximo de CAs que podem ser encadeadas até esse certificado de CA. Se o tamanho máximo do caminho do emissor for definido como 0, a CA só poderá emitir certificados de entidade final. Se for 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

    Opcional: é possível configurar outras extensões personalizadas para incluir 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.
  8. Para salvar todos os valores predefinidos, clique em Concluído.

  9. Em seguida, acesse a seção Configurar restrições de extensão. Selecione uma destas opções:

    • Copiar todas as extensões de solicitações de certificado para o certificado
    • Remover todas as extensões de solicitações de certificado
    • Copiar extensões específicas de solicitações de certificado para o certificado
  10. Se você optar por copiar extensões específicas, faça o seguinte:
    • Clique no campo Extensões de certificado conhecidas e desmarque as extensões desnecessárias na lista.
    • No campo Extensões personalizadas, adicione os identificadores de objetos das extensões que você quer incluir nos certificados emitidos pelo pool de AC.

  11. Clique em Próxima e acesse a seção Configurar restrições de identidade. Para configurar restrições no assunto e nos SANs nos certificados emitidos pelo pool de AC, selecione uma ou ambas as opções a seguir:

    • Copiar o assunto das solicitações de certificado para o certificado
    • Copiar nomes alternativos do assunto (SAN, na sigla em inglês) das solicitações de certificado para o certificado
    Opcional: na seção Configurar restrições de identidade, adicione uma expressão da Common Expression Language (CEL) para definir restrições nos assuntos do certificado. Para mais informações, consulte Como usar a CEL.

  12. Clique em Próxima e em Concluído.

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

Substitua:

  • TEMPLATE_ID: o identificador exclusivo do modelo de certificado.
  • FILE_PATH: o arquivo YAML que descreve os valores X.509 definidos pelo modelo de certificado.

A flag --copy-sans permite que a extensão de nome alternativo do assunto (SAN) da solicitação de certificado seja copiada para o certificado assinado. Como alternativa, especifique --no-copy-sans para descartar os SANs especificados pelo caller da solicitação de certificado.

A flag --copy-subject permite que o assunto da solicitação de certificado seja copiado para o certificado assinado. Como alternativa, especifique --no-copy-subject para remover qualquer assunto especificado pelo caller da solicitação de certificado.

A flag --identity-cel-expression usa uma expressão CEL que é avaliada em relação ao assunto e ao nome alternativo do assunto do certificado antes da emissão. Ela retorna um booleano que indica se a solicitação deve ser permitida. Para informações sobre como usar uma expressão da Common Expression Language (CEL) em um modelo de certificado, consulte Usar a CEL em modelos de certificado.

A flag --predefined-values-file especifica o caminho para um arquivo YAML que descreve os valores X.509 predefinidos definidos por esse modelo. As extensões fornecidas são copiadas para todas as solicitações de certificado que usam esse modelo, tendo precedência sobre as extensões permitidas na solicitação de certificado. Se você atualizar qualquer parte dos valores X.509 predefinidos, a atualização vai substituir todo o conjunto de valores X.509 predefinidos.

Se a flag --copy-all-requested-extensions estiver definida, todas as extensões especificadas na solicitação de certificado serão copiadas para o certificado assinado.

Se a flag --copy-extensions-by-oid estiver definida, OIDs específicos serão copiados da solicitação de certificado para o certificado assinado.

Se a flag --copy-known-extensions estiver definida, extensões específicas serão copiadas da solicitação de certificado para o certificado assinado. Essas extensões conhecidas podem ser uma das seguintes: base-key-usage, extended-key-usage, ca-options, policy-ids ou aia-ocsp-servers.

Remova a flag --copy-all-requested-extensions para ignorar todas as extensões X.509 na solicitação de certificado, mas ainda mantenha os valores predefinidos definidos neste modelo.

Confira um exemplo de configuração de modelo de certificado:

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

Os valores não especificados no YAML são omitidos ou definidos como padrão para false.

As seguintes extensões são omitidas se um valor não for especificado:

  • keyUsage
  • policyIds
  • additionalExtensions
  • Campo maxIssuerPathLength na extensão caOptions

As extensões a seguir usam false por padrão se um valor não for especificado:

  • Campo isCa na extensão caOptions

Criar um modelo de certificado para cenários comuns

Esta seção fornece comandos gcloud para criar um modelo de certificado para casos de uso comuns.

Certificados TLS do servidor DNS para qualquer domínio

Para criar um modelo de certificado para emitir certificados TLS do servidor que permitam qualquer domínio, use as instruções a seguir:

  1. Crie um arquivo com o nome leaf_server_tls_values.yaml e adicione a seguinte configuração de TLS do servidor de entidade final a ele:

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. Para permitir apenas certificados com SANs do tipo DNS, execute o seguinte comando gcloud:

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

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

Certificados TLS do servidor DNS com apenas domínios de teste

Para criar um modelo de certificado para emitir certificados TLS do servidor com SANs de DNS limitados a domínios de teste, use o seguinte comando gcloud:

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

O conteúdo do arquivo leaf_server_tls_values.yaml precisa ser igual ao exemplo anterior.

Para mais informações sobre como usar expressões CEL para garantir que os nomes DNS comecem ou terminem com uma string específica, consulte Exemplos de expressões CEL.

Certificados de identidade da carga de trabalho

Para criar um modelo de certificado para emitir certificados TLS mútuos (mTLS), use as seguintes instruções:

  1. Crie um arquivo com o nome leaf_mtls_values.yaml e adicione a seguinte configuração de TLS mútuo de entidade final a ele.

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. Para permitir apenas certificados com SANs de URI SPIFFE, use o seguinte comando gcloud:

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

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

Para mais informações sobre como usar expressões CEL para garantir que os nomes DNS comecem ou terminem com uma string específica, consulte Exemplos de expressões CEL.

Conceder acesso ao modelo de certificado

Você pode usar um modelo de certificado se tiver o papel de Usuário do modelo de certificado de serviço de CA (roles/privateca.templateUser). Recomendamos que os autores de um modelo de certificado concedam a função de usuário do modelo de certificado de serviço de CA aos membros da organização que podem usar esse modelo.

Para conceder o papel de usuário do modelo de certificado do CA Service (roles/privateca.templateUser) a todos no domínio example.com, use o seguinte comando gcloud:

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

Substitua:

  • TEMPLATE_ID: o identificador exclusivo do modelo de certificado.

Para mais informações sobre o comando gcloud privateca templates add-iam-policy-binding, consulte gcloud privateca templates add-iam-policy-binding.

Para mais informações sobre papéis do IAM para o serviço de CA e as permissões associadas, consulte Controle de acesso com o IAM.

A seguir