Crear una plantilla de certificado
En esta página, se describen los atributos de una plantilla de certificado y se explica cómo puedes crear una.
Descripción general de las plantillas de certificado
Certificate Authority Service proporciona plantillas parametrizadas y reutilizables que puedes usar para situaciones comunes de emisión de certificados. Una plantilla de certificado representa un esquema de emisión de certificados relativamente estático y bien definido dentro de una organización. El recurso CertificateTemplate
incluye lo siguiente:
- Es una expresión de Common Expression Language (CEL) que se evalúa en función del asunto y los SAN solicitados en todas las solicitudes de certificados que usan la plantilla. Para obtener más información sobre el uso de CEL, consulta Cómo usar CEL.
- Una lista de entidades permitidas que especifique si el asunto o el nombre alternativo del asunto se pueden copiar de la solicitud del usuario final al certificado emitido.
- Una lista de entidades permitidas opcional que especifica qué extensiones X.509, si las hay, se pueden copiar de la solicitud del usuario final al certificado emitido.
- Es un conjunto opcional de valores de extensión X.509 que se agregan a todos los certificados emitidos que usan la plantilla.
En esencia, una plantilla de certificado puede convertirse en un marco de trabajo de emisión de certificados verticales completo. Para obtener más detalles, consulta la definición completa del mensaje CertificateTemplate.
Valores predefinidos en una plantilla de certificado
Los valores predefinidos de una plantilla de certificado se agregan a todos los certificados que la usan. Permiten crear situaciones comunes de emisión de certificados, como mTLS o firma de código. Los valores incluyen lo siguiente:
- Usos de claves: Especifica el uso de claves base para un certificado según la sección 4.2.1.12 de la RFC 5280.
- Usos extendidos de claves: Especifica el uso extendido de claves para un certificado de acuerdo con la sección 4.2.1.3 de la RFC 5280.
- Si el certificado es una AC: Especifica si el certificado puede emitir certificados adicionales o si es un certificado de entidad final.
- Longitud máxima de la ruta de interacciones del emisor: En el caso de una AC, especifica la cantidad máxima de AC que se pueden encadenar hasta este certificado de AC. Si la longitud máxima de la ruta de interacciones del emisor se establece en 0, la AC solo puede emitir certificados de entidad final. Si se establece en 1, la cadena debajo de este certificado de AC solo puede incluir una AC subordinada. Si no se declara un valor, la cantidad de AC subordinadas en la cadena debajo de esta AC no tiene límites.
- Servidores OCSP de AIA: Se refiere a los servidores OCSP en la extensión de acceso a la información de la autoridad (AIA) de un certificado, como se describe en la sección 4.2.2.1 de la RFC 5280.
- Extensiones X.509 adicionales: Describe las extensiones X.509 personalizadas.
En la siguiente muestra de código, se mencionan todos los campos predefinidos de una plantilla de certificado:
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"
Los valores que no se especifican en el YAML se omiten o se establecen de forma predeterminada en false
.
Se omiten las siguientes extensiones si no se especifica un valor:
keyUsage
policyIds
additionalExtensions
- Campo
maxIssuerPathLength
en la extensióncaOptions
Las siguientes extensiones se establecen de forma predeterminada en false
si no se especifica un valor:
- Campo
isCa
en la extensióncaOptions
Crear una plantilla de certificado
Para crear una plantilla de certificado, usa el siguiente 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>
Reemplaza lo siguiente:
- TEMPLATE_ID: Es el identificador único de la plantilla de certificado.
- FILE_PATH: Es el archivo YAML que describe los valores X.509 que establece la plantilla de certificado.
La marca --copy-sans
permite que la extensión de nombre alternativo de asunto (SAN) de la solicitud de certificado se copie en el certificado firmado. Como alternativa, puedes especificar --no-copy-sans
para quitar de la solicitud de certificado los SAN especificados por el llamador.
La marca --copy-subject
permite que el asunto de la solicitud de certificado se copie en el certificado firmado. Como alternativa, puedes especificar --no-copy-subject
para quitar de la solicitud de certificado los sujetos especificados por el emisor.
La marca --identity-cel-expression
toma una expresión CEL que se evalúa en función del asunto y el nombre alternativo del asunto del certificado antes de que se emita y muestra un valor booleano que indica si se debe permitir la solicitud. Para obtener información sobre el uso de una expresión de Common Expression Language (CEL) para una plantilla de certificado, consulta Cómo usar CEL para plantillas de certificados.
La marca --predefined-values-file
especifica la ruta de acceso a un archivo YAML que describe los valores X.509 predefinidos que establece esta plantilla. Las extensiones proporcionadas se copian en todas las solicitudes de certificado que usan esta plantilla y tienen prioridad sobre cualquier extensión permitida en la solicitud de certificado. Si actualizas alguna parte de los valores X.509 predefinidos, la actualización reemplazará todo el conjunto de valores X.509 predefinidos.
Si se establece la marca --copy-all-requested-extensions
, todas las extensiones especificadas en la solicitud de certificado se copian en el certificado firmado. Como alternativa, se puede usar la marca --copy-extensions-by-oid
para copiar OID específicos de la solicitud de certificado en el certificado firmado, y la marca --copy-known-extensions
para copiar extensiones de la solicitud de certificado en el certificado firmado. Debe ser uno de los siguientes: base-key-usage
, extended-key-usage
, ca-options
, policy-ids
o aia-ocsp-servers
.
Quita la marca --copy-all-requested-extensions
para ignorar todas las extensiones X.509 en la solicitud de certificado, pero mantén los valores predefinidos definidos en esta plantilla.
Crea una plantilla de certificado para situaciones comunes
En esta sección, se proporcionan comandos gcloud
para crear una plantilla de certificado para casos de uso comunes.
Certificados TLS del servidor DNS para cualquier dominio
Para crear una plantilla de certificado para emitir certificados TLS del servidor que permitan cualquier dominio, sigue estas instrucciones:
Crea un archivo con el nombre
leaf_server_tls_values.yaml
y agrégale la siguiente configuración de TLS del servidor de la entidad final:leaf_server_tls_values.yaml
keyUsage: baseKeyUsage: digitalSignature: true keyEncipherment: true extendedKeyUsage: serverAuth: true caOptions: isCa: false
Para permitir solo certificados con SAN de tipo
DNS
, ejecuta el siguiente 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)"
Para obtener más información sobre el comando
gcloud privateca templates create
, consulta gcloud privateca templates create.
Certificados TLS del servidor DNS con solo dominios de prueba
Para crear una plantilla de certificado para emitir certificados TLS del servidor con DNS SAN limitados a dominios de prueba, usa el siguiente 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'))"
El contenido del archivo leaf_server_tls_values.yaml
debe ser el mismo que el del ejemplo anterior.
Para obtener más información sobre el uso de expresiones CEL para garantizar que los nombres de DNS comiencen o terminen con una cadena en particular, consulta Expresiones de ejemplo de CEL.
Certificados de Workload Identity
Para crear una plantilla de certificado para emitir certificados de TLS mutuos (mTLS), sigue estas instrucciones:
Crea un archivo con el nombre
leaf_mtls_values.yaml
y agrégale la siguiente configuración de TLS mutua de la entidad final.leaf_mtls_values.yaml
keyUsage: baseKeyUsage: digitalSignature: true keyEncipherment: true extendedKeyUsage: serverAuth: true clientAuth: true caOptions: isCa: false
Para permitir solo certificados con SAN de URI SPIFFE, usa el siguiente 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://'))"
Para obtener más información sobre el comando
gcloud privateca templates create
, consulta gcloud privateca templates create.
Para obtener más información sobre el uso de expresiones CEL para garantizar que los nombres de DNS comiencen o terminen con una cadena en particular, consulta Expresiones de ejemplo de CEL.
Otorga acceso a la plantilla de certificado
Puedes usar una plantilla de certificado si tienes el rol de Usuario de plantillas de certificados del Servicio de AC (roles/privateca.templateUser
). Recomendamos que los autores de una plantilla de certificado otorguen el rol de Usuario de plantillas de certificados del Servicio de AC a los miembros de la organización que podrían usar esa plantilla de certificado.
Para otorgar el rol de Usuario de plantillas de certificados del Servicio de CA (roles/privateca.templateUser
) a todas las personas del dominio example.com
, usa el siguiente comando gcloud
:
gcloud
gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
--member "domain:example.com" \
--role "roles/privateca.templateUser"
Reemplaza lo siguiente:
- TEMPLATE_ID: Es el identificador único de la plantilla de certificado.
Para obtener más información sobre el comando gcloud privateca templates add-iam-policy-binding
, consulta gcloud privateca templates add-iam-policy-binding.
Para obtener más información sobre los roles de IAM del servicio de AC y sus permisos asociados, consulta Control de acceso con IAM.
¿Qué sigue?
- Obtén información sobre Common Expression Language.
- Obtén información para usar Common Expression Language.
- Obtén información sobre los perfiles de certificados.