Demander un certificat à l'aide d'un modèle de certificat

Cette page explique comment demander un certificat à l'aide d'un modèle de certificat.

Les modèles de certificats vous permettent d'implémenter des contrôles de règles précis l'émission de votre certificat. Par exemple, vous pouvez utiliser des modèles de certificat pour standardiser l'émission des certificats TLS des serveurs entre les pools d'autorités de certification de votre organisation. Vous pouvez également utiliser des modèles de certificat pour appliquer des stratégies à un niveau plus précis, à des utilisateurs spécifiques. Cela est utile lorsque vous devez restreindre les types de de certificats que différentes personnes peuvent émettre. Vous pouvez aussi réutiliser des modèles pour les scénarios d'émission courants.

Avant de commencer

  1. Préparez votre environnement pour le service de certification.

  2. Pour obtenir les autorisations dont vous avez besoin pour émettre des certificats à l’aide d’un modèle de certificat, demandez à votre administrateur de vous attribuer l'utilisateur du modèle de certificat du service CA (roles/privateca.templateUser) rôle IAM sur le modèle de certificat.

    Pour en savoir plus sur les rôles IAM prédéfinis pour le service CA, consultez la page Contrôle des accès avec IAM.

    Pour en savoir plus sur l'attribution d'un rôle IAM à un compte principal, consultez Attribuer un seul rôle.

Émission de certificats de test

Avant d'utiliser un modèle de certificat pour demander un certificat signé, nous vous recommandons de vérifier la capacité du modèle de certificat à générer correctement certificat. L'émission du certificat échoue en cas de conflit entre l'autorité de certification les stratégies d'émission du pool et les stratégies du modèle de certificat. En testant l'émission, vous pouvez identifier et résoudre de manière proactive ces conflits. Notez que les certificats de test ne sont pas encodés au format PEM, qu'ils ne sont pas signés et qu'ils ne sont pas facturés.

Pour tester l'émission d'un certificat à l'aide d'un modèle de certificat, procédez comme suit:

Console

  1. Accédez à la page Certificate Authority Service (Service d'autorité de certification) dans la console Google Cloud.

    Accéder à Certificate Authority Service

  2. Cliquez sur l'onglet Gestionnaire de modèles.

  3. Cliquez sur le modèle de certificat que vous souhaitez tester. La page Détails du modèle s'affiche.

  4. Pour créer une demande de test, cliquez sur Créer un certificat, puis sur Émission de certificat de test. Le formulaire de demande de certificat s'affiche.

  5. Spécifiez les informations suivantes qui sont requises pour créer une demande de certificat:

    • Region (Région) : emplacement du certificat. Il doit être identique à celui du pool d'autorités de certification.
    • Pool d'autorités de certification : pool d'autorités de certification chargé d'émettre le certificat.
    • Modèle de certificat : modèle que vous souhaitez utiliser pour l'émission de certificats.
    • Domaine : nom de domaine du site que vous souhaitez sécuriser à l'aide d'un certificat SSL ou TLS.
  6. Cliquez sur Générer un certificat.

  7. Une fois le certificat créé, cliquez sur Afficher. Le test ou l'échantillon certificat s'affiche sur la même page dans un panneau séparé.

  8. Si l'émission du certificat échoue en raison de conflits, résolvez-les et envoyez le test demande de certificat.

Émettre des certificats à l'aide d'un modèle de certificat

Pour émettre un certificat signé à l'aide d'un modèle de certificat, procédez comme suit :

Console

  1. Accédez à la page Certificate Authority Service (Service d'autorité de certification) dans la console Google Cloud.

    Accéder à Certificate Authority Service}

  2. Cliquez sur l'onglet Gestionnaire de modèles.

  3. Sur la page Modèles de certificat, cliquez sur le modèle de certificat que vous souhaitez utiliser. La page Détails du modèle s'affiche.

  4. Cliquez sur Créer un certificat.

  5. Sélectionnez une région. Cette région doit être identique à la région du pool d'autorités de certification que vous prévoyez d'utiliser.

  6. Sélectionnez le pool d'autorités de certification.

  7. Pour générer un certificat à l'aide d'une demande de signature de certificat (CSR), consultez la section Demander un certificat à l'aide d'une CSR.

  8. Pour générer un certificat à l'aide d'une clé générée automatiquement, consultez la section Demander un certificat à l'aide d'une clé générée automatiquement.

Générer le certificat

  1. Cliquez sur Générer un certificat. Si le certificat est généré correctement, un message s'affiche.
  2. Pour voir le certificat généré, cliquez sur Afficher le certificat, puis cliquez sur Afficher.

Facultatif : Télécharger le certificat signé

  1. Pour télécharger la chaîne de certificats encodée au format PEM, cliquez sur Télécharger la chaîne de certificats
  2. Pour télécharger la clé privée encodée au format PEM associée, cliquez sur Téléchargez la clé privée.

gcloud

Pour émettre un certificat à l'aide d'un modèle de certificat, ajoutez l'option --template à la commande gcloud privateca certificates create au format suivant :

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

Remplacez CERTIFICATE_TEMPLATE par le nom du modèle de certificat que vous souhaitez utiliser pour émettre ce certificat. Le modèle spécifié doit se trouver dans le au même emplacement que le pool d'autorités de certification émettrices. Consultez les exemples fournis pour générer des certificats DNS de test et générer des certificats de production.

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

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Pour partager un lien vers un formulaire de demande de certificat avec d'autres membres de votre organisation afin qu'ils puissent demander un certificat à l'aide des mêmes paramètres, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à l'onglet Gestionnaire de pools d'autorités de certification, puis cliquez sur Partager le lien du formulaire de demande.
  2. Dans le panneau Lien vers le formulaire de demande de partage qui s'affiche, sélectionnez le pool d'autorités de certification. et le modèle de certificat que vous avez choisi pour créer votre requête. Le lien de demande de certificat s'affiche.
  3. Copiez le lien et partagez-le selon vos besoins.

Résoudre les conflits de règles

Les requêtes de certificat échouent avec une erreur d'argument non valide en cas de conflit entre la stratégie d'émission du pool d'autorités de certification et le modèle de certificat. Par exemple : si la même extension (telle que l'utilisation de base de la clé) est définie dans le champ valeurs de référence et les valeurs prédéfinies du modèle de certificat. Ou lorsque l'une des règles comporte des contraintes d'extension qui excluent une extension spécifique et que l'autre définit une valeur pour cette extension dans ses valeurs de référence.

Pour afficher et résoudre les conflits de règles, procédez comme suit:

Console

  1. Cliquez sur le lien Dépannage des règles d'émission qui s'affiche avec le message d'erreur. Une page de dépannage s'affiche, dans laquelle vous pouvez comparer les valeurs de référence. et les contraintes d'extension dans la stratégie d'émission du pool d'autorités de certification avec les valeurs de référence et les contraintes d'extension dans la règle du modèle de certificat. Notez que les conflits de règles sont mis en surbrillance.
  2. Accédez au pool d'autorités de certification ou au modèle de certificat pour mettre à jour les valeurs en conflit et résoudre le conflit.
  3. Une fois le conflit résolu, renvoyez la demande de certificat.

Afficher les certificats émis à l'aide d'un modèle

Pour afficher les certificats émis à l'aide d'un modèle de certificat, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à l'onglet Gestionnaire de modèles.
  2. Cliquez sur le modèle de certificat que vous avez utilisé pour l'émission du certificat.
  3. Sur la page Détails du modèle, cliquez sur Certificats. La liste des certificats émis à l'aide du modèle de certificat sélectionné est affiché.

Étape suivante