Richiedere un certificato utilizzando un modello di certificato

Questa pagina descrive come richiedere un certificato utilizzando un modello di certificato.

I modelli di certificato ti consentono di implementare controlli granulari dei criteri sull'emissione dei certificati. Ad esempio, puoi utilizzare i modelli di certificati per standardizzare l'emissione di certificati TLS del server nei pool di CA della tua organizzazione. In alternativa, puoi utilizzare i modelli di certificato per applicare i criteri a un livello più granulare, ad esempio a utenti specifici. Questo è utile nelle situazioni in cui devi limitare i tipi di certificati che persone diverse possono emettere. Puoi anche riutilizzare i modelli per scenari di emissione comuni.

Prima di iniziare

  1. Prepara l'ambiente per il servizio CA.

  2. Per ottenere le autorizzazioni necessarie per emettere certificati utilizzando un modello di certificato, chiedi all'amministratore di concederti il ruolo IAM Utente modello di certificato servizio CA (roles/privateca.templateUser) nel modello di certificato.

    Per ulteriori informazioni sui ruoli IAM predefiniti per il servizio CA, consulta Controllo dell'accesso con IAM.

    Per informazioni su come concedere un ruolo IAM a un'entità, consulta Concedere un singolo ruolo.

Testa rilascio certificati

Prima di utilizzare un modello di certificato per richiedere un certificato firmato, ti consigliamo di verificare la capacità del modello di generare correttamente un certificato. L'emissione del certificato non riesce quando esiste un conflitto tra i criteri di emissione del pool di CA e quelli del modello di certificato. Testando l'emissione, puoi identificare e risolvere in modo proattivo questi conflitti. Tieni presente che i certificati di test non sono codificati in PEM, non sono firmati e non comportano costi per la generazione.

Per testare l'emissione del certificato utilizzando un modello di certificato:

Console

  1. Vai alla pagina Certificate Authority Service nella console Google Cloud.

    Vai a Certificate Authority Service

  2. Fai clic sulla scheda Gestore modelli.

  3. Fai clic sul modello di certificato che vuoi testare. Viene visualizzata la pagina Dettagli modello.

  4. Per creare una richiesta di test, fai clic su Crea certificato e poi su Test emissione certificato. Viene visualizzato il modulo di richiesta del certificato.

  5. Specifica i seguenti dettagli necessari per creare una richiesta di certificato:

    • Regione: posizione del certificato. Deve corrispondere alla località del pool di CA.
    • Pool di CA: il pool di CA responsabile del rilascio del certificato.
    • Modello di certificato: il modello che vuoi utilizzare per l'emissione del certificato.
    • Dominio: il nome di dominio del sito da proteggere con un certificato SSL o TLS.
  6. Fai clic su Genera certificato.

  7. Dopo aver creato il certificato, fai clic su Visualizza. Il certificato di test o del campione viene visualizzato nella stessa pagina in un riquadro separato.

  8. Se l'emissione del certificato non riesce a causa di conflitti, risolvi i conflitti e invia di nuovo la richiesta di certificato di prova.

Emettere certificati utilizzando un modello di certificato

Per emettere un certificato firmato utilizzando un modello di certificato, procedi nel seguente modo:

Console

  1. Vai alla pagina Certificate Authority Service nella console Google Cloud.

    Vai a Certificate Authority Service}

  2. Fai clic sulla scheda Gestore modelli.

  3. Nella pagina Modelli di certificato, fai clic sul modello di certificato che vuoi utilizzare. Viene visualizzata la pagina Dettagli modello.

  4. Fai clic su Crea certificato.

  5. Seleziona una regione. Questa regione deve essere la stessa del pool di CA che intendi utilizzare.

  6. Seleziona il pool di CA.

  7. Per generare un certificato utilizzando una richiesta di firma del certificato (CSR), consulta Richiedi un certificato utilizzando la CSR.

  8. Per generare un certificato utilizzando una chiave generata automaticamente, consulta Richiedi un certificato utilizzando una chiave generata automaticamente.

Genera il certificato

  1. Fai clic su Genera certificato. Se il certificato viene generato correttamente, viene visualizzato un messaggio.
  2. Per visualizzare il certificato generato, fai clic su Visualizza certificato e poi su Visualizza.

(Facoltativo) Scarica il certificato firmato

  1. Per scaricare la catena di certificati con codifica PEM, fai clic su Scarica catena di certificati.
  2. Per scaricare la chiave privata con codifica PEM associata, fai clic su Scarica chiave privata.

gcloud

Per emettere un certificato utilizzando un modello di certificato, aggiungi il flag --template al comando gcloud privateca certificates create nel seguente formato:

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

Sostituisci CERTIFICATE_TEMPLATE con il nome del modello di certificato che vuoi utilizzare per emettere questo certificato. Il modello specificato deve trovarsi nella stessa posizione del pool di CA emittente. Per ulteriori informazioni, consulta gli esempi forniti per la generazione di certificati DNS di test e la generazione di certificati di produzione.

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

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Per condividere il link a un modulo di richiesta di certificato con altri utenti della tua organizzazione in modo che possano richiedere un certificato utilizzando gli stessi parametri, procedi nel seguente modo:

Console

  1. Nella console Google Cloud, vai alla scheda Gestione pool CA e fai clic su Condividi link al modulo di richiesta.
  2. Nel riquadro Condividi link del modulo di richiesta visualizzato, seleziona il pool di CA e il modello di certificato che hai scelto per creare la richiesta. Viene visualizzato il link per la richiesta del certificato.
  3. Copia il link e condividilo come richiesto.

Risolvere i conflitti di norme

Le richieste di certificato non vanno a buon fine con un errore di argomento non valido quando esiste un conflitto tra il criterio di emissione del pool di CA e il modello di certificato. Ad esempio, se la stessa estensione (ad esempio l'utilizzo della chiave di base) è definita nei valori di riferimento del pool di CA e nei valori predefiniti del modello di certificato. In alternativa, quando un criterio ha vincoli di estensione che escludono un'estensione specifica e l'altro criterio definisce un valore per l'estensione nei valori di riferimento.

Per visualizzare e risolvere i conflitti di norme:

Console

  1. Fai clic sul link Strumento per la risoluzione dei problemi relativi alle norme relative al rilascio visualizzato con il messaggio di errore. Viene visualizzata una pagina per la risoluzione dei problemi in cui puoi confrontare i valori di riferimento e i vincoli di estensione nel criterio di emissione del pool di CA con i valori di riferimento e i vincoli di estensione nel criterio del modello di certificato. Tieni presente che i conflitti di norme sono evidenziati.
  2. Accedi al pool di CA o al modello di certificato per aggiornare i valori in conflitto e risolvere il conflitto.
  3. Una volta risolto il conflitto, invia di nuovo la richiesta di certificato.

Visualizzare i certificati emessi utilizzando un modello

Per visualizzare i certificati emessi utilizzando un modello di certificato:

Console

  1. Nella console Google Cloud, vai alla scheda Gestore dei modelli.
  2. Fai clic sul modello di certificato che hai utilizzato per l'emissione del certificato.
  3. Nella pagina Dettagli modello, fai clic su Certificati. Viene visualizzato l'elenco dei certificati emessi utilizzando il modello di certificato selezionato.

Passaggi successivi