Richiedere un certificato utilizzando un modello di certificato

In questa pagina viene descritto come richiedere un certificato utilizzando un modello di certificato.

I modelli di certificato consentono di implementare controlli dei criteri granulari durante l'emissione dei certificati. Ad esempio, puoi utilizzare i modelli di certificato 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 criteri a un livello più granulare, ad esempio per utenti specifici. Questa funzionalità è utile nelle situazioni in cui è necessario limitare i tipi di certificati che possono essere emessi da persone diverse. 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 certificato servizio CA (roles/privateca.templateUser) per il modello di certificato.

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

    Per informazioni sulla concessione di un ruolo IAM a un'entità, consulta Concedi 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 va a buon fine quando c'è un conflitto tra i criteri di emissione del pool di CA e i criteri del modello di certificato. Testando l'emissione, puoi identificare e risolvere proattivamente questi conflitti. Tieni presente che i certificati di test non sono con codifica PEM, non sono firmati e non prevedono addebiti per la generazione.

Per testare l'emissione dei 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 Gestione 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, quindi su Verifica emissione del certificato. Viene visualizzato il modulo di richiesta del certificato.

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

    • Regione: la località del certificato. Deve essere la stessa località del pool di CA.
    • Pool di CA: il pool di CA responsabile dell'emissione del certificato.
    • Modello di certificato: il modello che vuoi utilizzare per l'emissione del certificato.
    • Dominio: il nome di dominio del sito che vuoi 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 di esempio viene visualizzato sulla stessa pagina in un riquadro separato.

  8. Se l'emissione del certificato non va a buon fine 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:

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 a quella 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), vedi Richiedere un certificato utilizzando la richiesta di firma del certificato (CSR).

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

Genera il certificato

  1. Fai clic su Genera certificato. Se il certificato è stato generato, viene visualizzato un messaggio.
  2. Per visualizzare il certificato generato, fai clic su Visualizza certificato, quindi fai clic 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 saperne di più, consulta gli esempi forniti per la generazione di certificati DNS di prova 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 di un modulo di richiesta di certificato con altri utenti della tua organizzazione in modo che possano richiederlo utilizzando gli stessi parametri:

Console

  1. Nella console Google Cloud, vai alla scheda Gestore del pool di CA e fai clic su Condividi link al modulo di richiesta.
  2. Nel riquadro Condividi link al 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 alla richiesta di certificato.
  3. Copia il link e condividilo in base alle tue esigenze.

Risolvi i conflitti delle norme

Le richieste di certificato hanno esito negativo con un errore relativo a un argomento non valido quando c'è un conflitto tra il criterio di emissione del pool di CA e il modello di certificato. Ad esempio, se la stessa estensione (come l'utilizzo della chiave di base) è definita nei valori di riferimento del pool di CA e nei valori predefiniti del modello di certificato. Oppure quando un criterio ha vincoli relativi alle estensioni che escludono un'estensione specifica, mentre l'altro criterio ne definisce un valore nei valori di riferimento.

Per visualizzare e risolvere i conflitti delle norme:

Console

  1. Fai clic sul link Strumento per la risoluzione dei problemi relativi ai criteri di emissione visualizzato con il messaggio di errore. Viene visualizzata una pagina dello strumento per la risoluzione dei problemi in cui puoi confrontare i valori di riferimento e i vincoli delle estensioni nel criterio di emissione del pool di CA con i valori di riferimento 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.

Visualizza 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 Template Manager.
  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