Crea un modello di certificato

Questa pagina descrive gli attributi di un modello di certificato e spiega come puoi crearne uno.

Panoramica dei modelli di certificato

Certificate Authority Service fornisce modelli parametrizzabili e riutilizzabili che puoi utilizzare per scenari comuni di emissione di certificati. Un modello di certificato rappresenta uno schema di emissione di certificati relativamente statico e ben definito all'interno di un'organizzazione. La risorsa CertificateTemplate include quanto segue.

  1. Un'espressione Common Expression Language (CEL) che viene valutata in base all'oggetto e ai SAN richiesti in tutte le richieste di certificato che utilizzano il modello. Per ulteriori informazioni sull'utilizzo di CEL, consulta Utilizzare CEL.
  2. Una lista consentita che specifica se il nome dell'oggetto o il nome alternativo dell'oggetto può essere copiato dalla richiesta dell'utente finale al certificato emesso.
  3. Una lista consentita facoltativa che specifica quali estensioni X.509, se presenti, possono essere copiate dalla richiesta dell'utente finale al certificato emesso.
  4. Un insieme facoltativo di valori delle estensioni X.509 che vengono aggiunti a tutti i certificati emessi che utilizzano il modello.

Un modello di certificato può diventare essenzialmente un framework di emissione di certificati verticali a tutti gli effetti. Per maggiori dettagli, consulta la definizione completa del messaggio CertificateTemplate.

Valori predefiniti in un modello di certificato

I valori predefiniti in un modello di certificato vengono aggiunti a tutti i certificati che lo utilizzano. Consentono di creare scenari comuni di rilascio di certificati, come mTLS o firma del codice. I valori includono:

  • Utilizzi della chiave: specifica l'utilizzo della chiave di base per un certificato in base alla sezione 4.2.1.12 del RFC 5280.
  • Utilizzi estesi della chiave: specifica l'utilizzo esteso della chiave per un certificato in base alla sezione 4.2.1.3 del RFC 5280.
  • Se il certificato è una CA: specifica se il certificato può emettere certificati aggiuntivi o se si tratta di un certificato dell'entità finale.
  • Lunghezza massima del percorso dell'emittente: nel caso di una CA, specifica il numero massimo di CA che possono essere concatenate a questo certificato CA. Se la lunghezza massima del percorso dell'emittente è impostata su 0, la CA può emettere solo certificati dell'entità finale. Se è impostato su 1, la catena sotto questo certificato CA può includere una sola CA subordinata. Se non viene dichiarato un valore, il numero di CA subordinate nella catena sotto questa CA è illimitato.
  • Server OCSP AIA: si riferisce ai server OCSP nell'estensione per l'accesso alle informazioni sull'autorità (AIA) di un certificato, come descritto nella sezione 4.2.2.1 del RFC 5280.
  • Estensioni X.509 aggiuntive: descrive le estensioni X.509 personalizzate.

Il seguente esempio di codice menziona tutti i campi predefiniti in un modello di certificato:

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

I valori non specificati in YAML vengono omessi o impostati su false per impostazione predefinita.

Le seguenti estensioni vengono omesse se non viene specificato un valore:

  • keyUsage
  • policyIds
  • additionalExtensions
  • Campo maxIssuerPathLength nell'estensione caOptions

Per le seguenti estensioni, il valore predefinito è false se non viene specificato un valore:

  • Campo isCa nell'estensione caOptions

Crea un modello di certificato

Per creare un modello di certificato, utilizza il seguente comando gcloud:

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

Sostituisci quanto segue:

  • TEMPLATE_ID: l'identificatore univoco del modello di certificato.
  • FILE_PATH: il file YAML che descrive i valori X.509 impostati dal modello di certificato.

Il flag --copy-sans consente di copiare l'estensione Subject Alternative Name (SAN) dalla richiesta di certificato nel certificato firmato. In alternativa, puoi specificare --no-copy-sans per rimuovere dalla richiesta di certificato tutti i SAN specificati dall'utente chiamante.

Il flag --copy-subject consente di copiare l'oggetto della richiesta di certificato nel certificato firmato. In alternativa, puoi specificare --no-copy-subject per rimuovere dalla richiesta di certificato gli argomenti specificati dall'utente che ha effettuato la chiamata.

Il flag --identity-cel-expression accetta un'espressione CEL che viene valutata in base all'oggetto e al nome alternativo dell'oggetto del certificato prima che venga emesso e restituisce un valore booleano che indica se la richiesta deve essere consentita. Per informazioni sull'utilizzo di un'espressione Common Expression Language (CEL) per un modello di certificato, consulta Utilizzare CEL per i modelli di certificato.

Il flag --predefined-values-file specifica il percorso di un file YAML che descrive eventuali valori X.509 predefiniti impostati da questo modello. Le estensioni fornite vengono copiate in tutte le richieste di certificato che utilizzano questo modello e hanno la precedenza su eventuali estensioni consentite nella richiesta di certificato. Se aggiorni una parte dei valori X.509 predefiniti, l'aggiornamento sostituisce l'intero insieme di valori X.509 predefiniti.

Se il flag --copy-all-requested-extensions è impostato, tutte le estensioni specificate nella richiesta di certificato vengono copiate nel certificato firmato. In alternativa, il flag --copy-extensions-by-oid può essere utilizzato per copiare OID specifici dalla richiesta di certificato nel certificato firmato e il flag --copy-known-extensions può essere utilizzato per copiare le estensioni dalla richiesta di certificato nel certificato firmato. Deve essere uno dei seguenti: base-key-usage, extended-key-usage, ca-options, policy-ids, aia-ocsp-servers.

Rimuovi il flag --copy-all-requested-extensions per ignorare tutte le estensioni X.509 nella richiesta di certificato, mantenendo comunque i valori predefiniti definiti in questo modello.

Creare un modello di certificato per scenari comuni

Questa sezione fornisce i comandi gcloud per creare un modello di certificato per i casi d'uso comuni.

Certificati TLS del server DNS per qualsiasi dominio

Per creare un modello di certificato per l'emissione di certificati TLS del server che consentano qualsiasi dominio, segui le istruzioni riportate di seguito:

  1. Crea un file denominato leaf_server_tls_values.yaml e aggiungi la seguente configurazione TLS del server dell'entità finale:

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. Per consentire solo i certificati con SAN di tipo DNS, esegui il seguente comando gcloud:

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

    Per ulteriori informazioni sul comando gcloud privateca templates create, consulta gcloud privateca templates create.

Certificati TLS del server DNS con solo domini di test

Per creare un modello di certificato per l'emissione di certificati TLS del server con DNS SAN limitati ai domini di test, utilizza il seguente comando gcloud:

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

I contenuti del file leaf_server_tls_values.yaml devono essere gli stessi dell'esempio precedente.

Per ulteriori informazioni sull'utilizzo delle espressioni CEL per assicurarti che i nomi DNS inizino o terminino con una determinata stringa, consulta le espressioni CEL di esempio.

Certificati di identità del workload

Per creare un modello di certificato per l'emissione di certificati TLS reciproci (mTLS), segui le istruzioni riportate di seguito:

  1. Crea un file denominato leaf_mtls_values.yaml e aggiungi la seguente configurazione TLS mutuale dell'entità finale.

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. Per consentire solo i certificati con SAN URI SPIFFE, utilizza il seguente comando gcloud:

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

    Per ulteriori informazioni sul comando gcloud privateca templates create, consulta gcloud privateca templates create.

Per ulteriori informazioni sull'utilizzo delle espressioni CEL per assicurarti che i nomi DNS inizino o terminino con una determinata stringa, consulta le espressioni CEL di esempio.

Concedi l'accesso al modello di certificato

Puoi utilizzare un modello di certificato se disponi del ruolo CA Service Certificate Template User (roles/privateca.templateUser). Consigliamo agli autori di un modello di certificato di concedere il ruolo Utente modello di certificato del servizio CA ai membri dell'organizzazione che potrebbero utilizzarlo.

Per concedere il ruolo CA Service Certificate Template User (roles/privateca.templateUser) a tutti gli utenti del dominio example.com, utilizza il seguente comando gcloud:

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

Sostituisci quanto segue:

  • TEMPLATE_ID: l'identificatore univoco del modello di certificato.

Per ulteriori informazioni sul comando gcloud privateca templates add-iam-policy-binding, consulta gcloud privateca templates add-iam-policy-binding.

Per ulteriori informazioni sui ruoli IAM per il servizio CA e sulle relative autorizzazioni associate, consulta Controllo dell'accesso con IAM.

Passaggi successivi