Solicitar um certificado usando um modelo

Nesta página, descrevemos como solicitar um certificado usando um modelo de certificado.

Com os modelos de certificado, é possível implementar controles de políticas detalhados na emissão de certificados. Por exemplo, é possível usar modelos de certificado para padronizar a emissão de certificados TLS de servidor em pools de CA na sua organização. Também é possível usar modelos de certificado para aplicar políticas em um nível mais granular, como para usuários específicos. Isso é útil em situações em que você precisa restringir os tipos de certificados que diferentes indivíduos podem emitir. Também é possível reutilizar modelos para cenários de emissão comuns.

Antes de começar

  1. Prepare seu ambiente para o CA Service.

  2. Para receber as permissões necessárias para emitir certificados usando um modelo de certificado, peça ao administrador para conceder a você o papel de IAM de usuário do modelo de certificado de serviço de CA (roles/privateca.templateUser) no modelo de certificado.

    Para mais informações sobre os papéis predefinidos do IAM para o serviço de CA, consulte Controle de acesso com o IAM.

    Para informações sobre como conceder um papel do IAM a um principal, consulte Conceder um único papel.

Emissão de certificado de teste

Antes de usar um modelo de certificado para solicitar um certificado assinado, recomendamos que você verifique a capacidade do modelo de certificado de gerar um certificado. A emissão de certificado falha quando há um conflito entre as políticas de emissão do pool de ACs e as políticas do modelo de certificado. Ao emitir testes, é possível identificar e resolver esses conflitos proativamente. Os certificados de teste não são codificados por PEM, não são assinados e não geram cobranças pela geração.

Para testar a emissão de certificados usando um modelo, siga estas etapas:

Console

  1. Acesse a página Certificate Authority Service no console do Google Cloud.

    Acesse Certificate Authority Service

  2. Clique na guia Gerenciador de modelos.

  3. Clique no modelo de certificado que você quer testar. A página Detalhes do modelo é exibida.

  4. Para criar uma solicitação de teste, clique em Criar certificado e em Emissão de certificado de teste. O formulário de solicitação de certificado será exibido.

  5. Especifique os detalhes a seguir, que são necessários para criar uma solicitação de certificado:

    • Região: local do certificado. Precisa ser a mesma localização do pool de ACs.
    • Pool de CA: o pool de CA responsável por emitir o certificado.
    • Modelo de certificado: o modelo que você quer usar para a emissão de certificados.
    • Domínio: o nome de domínio do site que você quer proteger com um certificado SSL ou TLS.
  6. Clique em Gerar certificado.

  7. Depois que o certificado for criado, clique em Ver. O certificado de teste ou amostra é exibido na mesma página em um painel separado.

  8. Se a emissão do certificado falhar devido a conflitos, resolva os conflitos e envie a solicitação de certificado de teste novamente.

Emitir certificados usando um modelo

Para emitir um certificado assinado usando um modelo de certificado, faça o seguinte:

Console

  1. Acesse a página Certificate Authority Service no console do Google Cloud.

    Acesse o Certificate Authority Service} (em inglês)

  2. Clique na guia Gerenciador de modelos.

  3. Na página Modelos de certificado, clique no modelo que você quer usar. A página Detalhes do modelo é exibida.

  4. Clique em Criar certificado.

  5. Selecione uma região. Essa região precisa ser a mesma do pool de ACs que você pretende usar.

  6. Selecione o pool de AC.

  7. Para gerar um certificado usando uma solicitação de assinatura de certificado (CSR, na sigla em inglês), consulte Solicitar um certificado usando CSR.

  8. Para gerar um certificado usando uma chave gerada automaticamente, consulte Solicitar certificado usando uma chave gerada automaticamente.

Gerar o certificado

  1. Clique em Gerar certificado. Se o certificado for gerado corretamente, uma mensagem será exibida.
  2. Para acessar o certificado gerado, clique em Ver certificado e, em seguida, clique em Visualizar.

Opcional: fazer o download do certificado assinado

  1. Para fazer o download da cadeia de certificados codificada em PEM, clique em Fazer o download da cadeia de certificados.
  2. Para fazer o download da chave privada codificada em PEM associada, clique em Fazer o download da chave privada.

gcloud

Para emitir um certificado usando um modelo, adicione a sinalização --template ao comando gcloud privateca certificates create no seguinte formato:

--template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/CERTIFICATE_TEMPLATE

Substitua CERTIFICATE_TEMPLATE pelo nome do modelo de certificado que você quer usar para emitir esse certificado. O modelo especificado precisa estar no mesmo local que o pool de ACs emissor. Para mais informações, consulte as amostras fornecidas sobre como gerar certificados DNS de teste e gerar certificados de produção.

Terraform

/**
 * Copyright 2022 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

resource "google_privateca_certificate_template" "template" {
  location    = "us-central1"
  name        = "my-certificate-template"
  description = "An updated sample certificate template"

  identity_constraints {
    allow_subject_alt_names_passthrough = true
    allow_subject_passthrough           = true

    cel_expression {
      description = "Always true"
      expression  = "true"
      location    = "any.file.anywhere"
      title       = "Sample expression"
    }
  }

  passthrough_extensions {
    additional_extensions {
      object_id_path = [1, 6]
    }

    known_extensions = ["EXTENDED_KEY_USAGE"]
  }

  predefined_values {
    additional_extensions {
      object_id {
        object_id_path = [1, 6]
      }

      value    = "c3RyaW5nCg=="
      critical = true
    }

    aia_ocsp_servers = ["string"]

    ca_options {
      is_ca                  = false
      max_issuer_path_length = 6
    }

    key_usage {
      base_key_usage {
        cert_sign          = false
        content_commitment = true
        crl_sign           = false
        data_encipherment  = true
        decipher_only      = true
        digital_signature  = true
        encipher_only      = true
        key_agreement      = true
        key_encipherment   = true
      }

      extended_key_usage {
        client_auth      = true
        code_signing     = true
        email_protection = true
        ocsp_signing     = true
        server_auth      = true
        time_stamping    = true
      }

      unknown_extended_key_usages {
        object_id_path = [1, 6]
      }
    }

    policy_ids {
      object_id_path = [1, 6]
    }
  }
}

resource "google_privateca_certificate_authority" "test_ca" {
  pool                     = "my-pool"
  certificate_authority_id = "my-certificate-authority-test-ca"
  location                 = "us-central1"
  deletion_protection      = false # set to true to prevent destruction of the resource
  config {
    subject_config {
      subject {
        organization = "HashiCorp"
        common_name  = "my-certificate-authority"
      }
      subject_alt_name {
        dns_names = ["hashicorp.com"]
      }
    }
    x509_config {
      ca_options {
        # is_ca *MUST* be true for certificate authorities
        is_ca = true
      }
      key_usage {
        base_key_usage {
          # cert_sign and crl_sign *MUST* be true for certificate authorities
          cert_sign = true
          crl_sign  = true
        }
        extended_key_usage {
          server_auth = false
        }
      }
    }
  }
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}


resource "google_privateca_certificate" "default" {
  pool                  = "my-pool"
  location              = "us-central1"
  certificate_authority = google_privateca_certificate_authority.test_ca.certificate_authority_id
  lifetime              = "860s"
  name                  = "my-certificate-from-template"
  pem_csr               = tls_cert_request.example.cert_request_pem
  certificate_template  = google_privateca_certificate_template.template.id
}

resource "tls_private_key" "example" {
  algorithm = "RSA"
}

resource "tls_cert_request" "example" {
  private_key_pem = tls_private_key.example.private_key_pem

  subject {
    common_name  = "example.com"
    organization = "ACME Examples, Inc"
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

Para compartilhar um link de formulário de solicitação de certificado com outras pessoas na sua organização, para que elas possam solicitar um certificado usando os mesmos parâmetros, faça o seguinte:

Console

  1. No console do Google Cloud, acesse a guia Gerenciador de pools de CA e clique em Compartilhar link do formulário de solicitação.
  2. No painel Compartilhar link do formulário de solicitação exibido, selecione o pool de ACs e o modelo de certificado que você escolheu para criar a solicitação. O link de solicitação de certificado será exibido.
  3. Copie o link e compartilhe conforme necessário.

Resolver conflitos de políticas

As solicitações de certificado falham com um erro de argumento inválido quando há um conflito entre a política de emissão do pool de ACs e o modelo de certificado. Por exemplo, se a mesma extensão (como o uso básico de chave) for definida nos valores de referência do pool de ACs e nos valores predefinidos do modelo de certificado. Ou quando uma política tem restrições de extensão que excluem uma extensão específica e a outra política define um valor para essa extensão nos valores de referência.

Para visualizar e resolver os conflitos de política, siga estas etapas:

Console

  1. Clique no link Solucionador de problemas de políticas de emissão exibido com a mensagem de erro. Uma página de solução de problemas é exibida, em que é possível comparar os valores de referência e as restrições de extensão na política de emissão do pool de ACs com os valores de referência e as restrições de extensão na política do modelo de certificado. Os conflitos de política estão destacados.
  2. Acesse o pool de ACs ou o modelo de certificado para atualizar os valores conflitantes e resolver o conflito.
  3. Quando o conflito for resolvido, envie a solicitação de certificado novamente.

Mostrar certificados emitidos usando um modelo

Para visualizar os certificados emitidos usando um modelo, faça o seguinte:

Console

  1. No console do Google Cloud, acesse a guia Gerenciador de modelos.
  2. Clique no modelo de certificado que você usou para a emissão.
  3. Na página Detalhes do modelo, clique em Certificados. A lista de certificados emitidos usando o modelo selecionado é exibida.

A seguir