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.
- 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 Utilizzare CEL.
- 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.
- Una lista consentita facoltativa che specifica quali estensioni X.509, se presenti, possono essere copiate dalla richiesta dell'utente finale al certificato emesso.
- 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ò 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 chiave: specifica l'utilizzo di base della chiave per un certificato in base a RFC 5280 sezione 4.2.1.12.
- 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 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 di accesso alle informazioni dell'autorità (AIA) di un certificato, come descritto nella sezione 4.2.2.1 di 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'estensionecaOptions
Per le seguenti estensioni, il valore predefinito è false
se non viene specificato un valore:
- Campo
isCa
nell'estensionecaOptions
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 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 tutti i 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 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, è possibile usare il flag --copy-extensions-by-oid
per copiare nel certificato firmato specifici OID dalla richiesta di certificato, mentre il flag --copy-known-extensions
può essere usato per copiare le estensioni dalla richiesta di certificato al 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 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:
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
Per consentire solo i certificati con SAN di tipo
DNS
, esegui questo comandogcloud
: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 garantire che i nomi DNS inizino o terminino con una determinata stringa, consulta Espressioni CEL di esempio.
Certificati di Workload Identity
Per creare un modello di certificato per l'emissione di certificati TLS reciproci (mTLS), segui le istruzioni riportate di seguito:
Crea un file con il nome
leaf_mtls_values.yaml
e aggiungi quanto segue configurazione TLS reciproca di un'entità finale.leaf_mtls_values.yaml
keyUsage: baseKeyUsage: digitalSignature: true keyEncipherment: true extendedKeyUsage: serverAuth: true clientAuth: true caOptions: isCa: false
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 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 di servizio CA ai membri dell'organizzazione che potrebbero utilizzare quel modello di certificato.
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 CA Service, e sulle autorizzazioni associate, vedi Controllo dell'accesso con IAM.
Passaggi successivi
- Scopri di più su Common Expression Language.
- Scopri come utilizzare il linguaggio di espressione comune.
- Scopri di più sui profili dei certificati.