Richiedi un certificato utilizzando un modello di certificato

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

I modelli di certificato consentono di implementare controlli dei criteri granulari rispetto all'emissione del certificato. 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 CA Service.

  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, vedi Controllo dell'accesso con IAM.

    Per informazioni sulla concessione di 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 di verificare la capacità del modello di generare correttamente certificato. L'emissione del certificato non riesce in caso di conflitto tra la CA i criteri di emissione del pool 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 di certificati 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: località del certificato. Deve corrispondere alla località del pool di CA.
    • Pool di CA: il pool di CA responsabile del rilascio del certificato.
    • Certificate template (Modello di certificato): il modello da utilizzare per il certificato una determinata emissione.
    • 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 test.

Emetti 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 Gestione 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 uguale alla regione 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 il 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, quindi 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 da utilizzare per emettere il 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 altre persone della tua organizzazione, di poter richiedere un certificato utilizzando gli stessi parametri, segui questi passaggi:

Console

  1. Nella console Google Cloud, vai alla scheda CA pool manager 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 e viene restituito un errore relativo a un argomento non valido in caso di 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 nel parametro valori di riferimento e i valori predefiniti del modello di certificato. Oppure quando un criterio ha vincoli di estensione che escludono un'estensione specifica e l'altro criterio definisce un valore per quell'estensione nei suoi valori di base.

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 dello strumento per la risoluzione dei problemi in cui puoi confrontare i valori base di riferimento ed estensioni nel criterio di emissione del pool di CA con i valori di base e i vincoli delle estensioni nel criterio del modello di certificato. Tieni presente che i conflitti delle 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 Gestione modelli.
  2. Fai clic sul modello di certificato che hai utilizzato per il rilascio.
  3. Nella pagina Dettagli modello, fai clic su Certificati. L'elenco dei certificati emessi utilizzando il modello di certificato selezionato è visualizzati.

Passaggi successivi