Crea un modello di certificato

In questa pagina vengono descritti gli attributi di un modello di certificato e viene spiegato come possono creare un modello di certificato.

Panoramica dei modelli di certificato

Certificate Authority Service fornisce modelli riutilizzabili e con parametri che puoi utilizzare per scenari di emissione dei certificati comuni. Un modello di certificato rappresenta uno schema di emissione dei 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 richiesto e alle SAN in tutte le richieste di certificato che utilizzano il modello. Per ulteriori informazioni sull'utilizzo di CEL, consulta Utilizzo di CEL.
  2. Una lista consentita che specifica se il nome alternativo del soggetto o del soggetto 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 dell'estensione X.509 che vengono aggiunti a tutti i certificati emessi che utilizzano il modello.

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

Valori predefiniti in un modello di certificato

I valori predefiniti di un modello di certificato vengono aggiunti a tutti i certificati che lo utilizzano. Consentono di creare scenari comuni di emissione dei certificati, come mTLS o la 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 è un'autorità di certificazione: specifica se il certificato può emettere altri certificati o se si tratta di un certificato di 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 al di sotto di questo certificato CA può includere una sola CA subordinata. Se non viene dichiarato un valore, il numero di CA subordinate nella catena al di sotto di 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: descrivono 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 nel file YAML sono omessi o vengono impostati come predefiniti su false.

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

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

Se non viene specificato un valore, le seguenti estensioni sono impostate automaticamente su false:

  • Campo isCa nell'estensione caOptions

Crea un modello di certificato

Per creare un modello di certificato, usa 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 eliminare dalla richiesta di certificato tutte le SAN specificate dal chiamante.

Il flag --copy-subject consente di copiare il soggetto della richiesta di certificato nel certificato firmato. In alternativa, puoi specificare --no-copy-subject per eliminare dalla richiesta di certificato qualsiasi oggetto specificato per il chiamante.

Il flag --identity-cel-expression accetta un'espressione CEL che viene valutata in base al nome alternativo del soggetto e del soggetto del certificato prima di essere 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 qualsiasi richiesta di certificato che utilizza questo modello, con la precedenza su qualsiasi estensione consentita nella richiesta di certificato. Se aggiorni una qualsiasi 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, ma mantenere comunque i valori predefiniti definiti in questo modello.

Crea 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 consentono di qualsiasi dominio, segui queste istruzioni:

  1. Crea un file con il nome 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 questo 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 limitate 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 Workload Identity

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

  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 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 garantire che i nomi DNS inizino o terminino con una determinata stringa, consulta Espressioni CEL di esempio.

Concedi l'accesso al modello di certificato

Puoi utilizzare un modello di certificato se hai il ruolo Utente modello di certificato di servizio CA (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 Utente modello di certificato di servizio CA (roles/privateca.templateUser) a tutti gli utenti nel 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 CA Service, e sulle autorizzazioni associate, vedi Controllo dell'accesso con IAM.

Passaggi successivi