Cómo solicitar un certificado con una plantilla de certificado

En esta página, se describe cómo solicitar un certificado mediante una plantilla de certificado.

Las plantillas de certificado te permiten implementar controles de políticas detallados en la emisión de certificados. Por ejemplo, puedes usar plantillas de certificados para estandarizar la emisión de certificados TLS del servidor en los grupos de AC de tu organización. También puedes usar plantillas de certificados para aplicar políticas a un nivel más detallado, como para usuarios específicos. Esto es útil en situaciones en las que necesitas restringir los tipos de certificados que pueden emitir diferentes personas. También puedes reutilizar las plantillas para situaciones de emisión comunes.

Antes de comenzar

  1. Prepara tu entorno para CA Service.

  2. Si quieres obtener los permisos que necesitas para emitir certificados mediante una plantilla de certificado, pídele a tu administrador que te otorgue la función de IAM Usuario de la plantilla de certificado del servicio de CA (roles/privateca.templateUser) en la plantilla del certificado.

    Si deseas obtener más información sobre las funciones predefinidas de IAM para el servicio de CA, consulta Control de acceso con IAM.

    Para obtener información sobre cómo otorgar un rol de IAM a una principal, consulta Otorga un solo rol.

Probar la emisión de certificados

Antes de usar una plantilla de certificado para solicitar un certificado firmado, te recomendamos que verifiques la capacidad de esta plantilla para generar un certificado de forma correcta. La emisión del certificado falla cuando hay un conflicto entre las políticas de emisión del grupo de AC y las políticas de la plantilla de certificado. Mediante la prueba de la emisión, puedes identificar y resolver estos conflictos de forma proactiva. Ten en cuenta que los certificados de prueba no tienen codificación PEM, no están firmados y no generan cargos de generación.

Para probar la emisión de certificados con una plantilla de certificado, sigue estos pasos:

Console

  1. Ve a la página Certificate Authority Service en la consola de Google Cloud.

    Ir a Certificate Authority Service

  2. Haz clic en la pestaña Administrador de plantillas.

  3. Haz clic en la plantilla del certificado que quieres probar. Aparecerá la página Detalles de la plantilla.

  4. Para crear una solicitud de prueba, haz clic en Crear certificado y, luego, en Probar emisión de certificados. Aparecerá el formulario de solicitud de certificado.

  5. Especifica los siguientes detalles que se requieren para crear una solicitud de certificado:

    • Región: Es la ubicación del certificado. Debe ser la misma que la ubicación del grupo de AC.
    • Grupo de AC: El grupo de AC responsable de emitir el certificado.
    • Plantilla de certificado: Es la plantilla que deseas usar para la emisión del certificado.
    • Dominio: Es el nombre de dominio del sitio que deseas proteger con un certificado SSL o TLS.
  6. Haz clic en Generar certificado.

  7. Después de crear el certificado, haz clic en Ver. El certificado de prueba o muestra se muestra en la misma página en un panel separado.

  8. Si la emisión del certificado falla debido a conflictos, resuelve los conflictos y vuelve a enviar la solicitud de certificado de prueba.

Emite certificados con una plantilla de certificado

Para emitir un certificado firmado con una plantilla de certificado, haz lo siguiente:

Console

  1. Ve a la página Certificate Authority Service en la consola de Google Cloud.

    Ir a Certificate Authority Service}

  2. Haz clic en la pestaña Administrador de plantillas.

  3. En la página Plantillas de certificados, haz clic en la plantilla de certificado que deseas utilizar. Aparecerá la página Detalles de la plantilla.

  4. Haga clic en Crear certificado.

  5. Selecciona una región. Esta región debe ser la misma que la del grupo de AC que quieres usar.

  6. Selecciona el grupo de AC.

  7. Para generar un certificado con una solicitud de firma de certificado (CSR), consulta Cómo solicitar un certificado con CSR.

  8. Para generar un certificado con una clave generada de forma automática, consulta Cómo solicitar un certificado con una clave generada de forma automática.

Genera el certificado

  1. Haz clic en Generar certificado. Si el certificado se genera correctamente, aparecerá un mensaje.
  2. Para ver el certificado generado, haz clic en Ver certificado y, luego, en Ver.

Opcional: Descarga el certificado firmado

  1. Para descargar la cadena de certificados con codificación PEM, haz clic en Descargar cadena de certificados.
  2. Para descargar la clave privada con codificación PEM asociada, haz clic en Descargar clave privada.

gcloud

Para emitir un certificado con una plantilla de certificado, agrega la marca --template al comando gcloud privateca certificates create en el siguiente formato:

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

Reemplaza CERTIFICATE_TEMPLATE por el nombre de la plantilla de certificado que deseas usar para emitir este certificado. La plantilla especificada debe estar en la misma ubicación que el grupo de AC emisora. Consulta las muestras proporcionadas para generar certificados DNS de prueba y generar certificados de producción para obtener más información.

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

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Para compartir un vínculo a un formulario de solicitud de certificado con otras personas de tu organización para que puedan solicitar un certificado con los mismos parámetros, haz lo siguiente:

Console

  1. En la consola de Google Cloud, ve a la pestaña Administrador de grupos de CA y haz clic en Compartir vínculo del formulario de solicitud.
  2. En el panel Vínculo del formulario de solicitud para compartir que aparece, selecciona el grupo de AC y la plantilla de certificado que elegiste para crear tu solicitud. Se mostrará el vínculo de solicitud de certificado.
  3. Copia el vínculo y compártelo según sea necesario.

Cómo resolver conflictos de políticas

Las solicitudes de certificados fallan con un error de argumento no válido cuando hay un conflicto entre la política de emisión del grupo de la AC y la plantilla de certificado. Por ejemplo, si la misma extensión (como el uso de la clave base) se define en los valores de referencia del grupo de AC y los valores predefinidos de la plantilla de certificado. O bien, cuando una política tiene restricciones de extensión que excluyen una extensión específica y la otra define un valor para esa extensión en los valores de referencia.

Para ver y resolver los conflictos de políticas, sigue estos pasos:

Console

  1. Haz clic en el vínculo Solucionador de problemas de políticas de emisión que se muestra con el mensaje de error. Aparecerá una página de solucionador de problemas, en la que puedes comparar los valores del modelo de referencia y las restricciones de extensión en la política de emisión del grupo de AC con los valores del modelo de referencia y las restricciones de extensión en la política de la plantilla de certificado. Observa que los conflictos de políticas aparecen destacados.
  2. Accede al grupo de AC o a la plantilla del certificado para actualizar los valores en conflicto y resolver el conflicto.
  3. Una vez resuelto el conflicto, vuelve a enviar la solicitud de certificado.

Cómo ver los certificados emitidos con una plantilla

Para ver los certificados emitidos con una plantilla de certificado, haz lo siguiente:

Console

  1. En la consola de Google Cloud, ve a la pestaña Administrador de plantillas.
  2. Haz clic en la plantilla del certificado que usaste para la emisión del certificado.
  3. En la página Detalles de la plantilla, haz clic en Certificados. Se mostrará la lista de certificados emitidos con la plantilla de certificado seleccionada.

¿Qué sigue?