Un certificado de cliente válido debe mostrar una cadena de confianza que se remonte al ancla de confianza (certificado raíz) en el almacén de confianza. En esta página se explica cómo crear tu propia cadena de confianza configurando tus propios certificados raíz e intermedios con la biblioteca OpenSSL.
Después de crear las raíces de confianza, en este documento se describe el proceso para subirlas al almacén de confianza del recurso TrustConfig
Certificate Manager. A continuación, se vincula la configuración de confianza al recurso de autenticación de cliente (ServerTLSPolicy
) y, después, se adjunta el recurso de autenticación de cliente al recurso de proxy HTTPS de destino del balanceador de carga.
Antes de empezar
- Consulta la descripción general de TLS mutuo.
- Consulta la guía para gestionar las configuraciones de confianza.
Instala Google Cloud CLI. Para obtener una descripción general completa de la herramienta, consulta la información general sobre la CLI de gcloud. Puedes encontrar comandos relacionados con el balanceo de carga en la referencia de la API y de la CLI de gcloud.
Si no has ejecutado la CLI de gcloud anteriormente, ejecuta primero el comando
gcloud init
para autenticarte.Habilita las siguientes APIs: API de Compute Engine, API de Certificate Manager, Network Security y API de Network Services. Para obtener más información, consulta Habilitar APIs.
Si usas un balanceador de carga de aplicación externo global o un balanceador de carga de aplicación clásico, asegúrate de haber configurado un balanceador de carga con alguno de los siguientes backends admitidos:
- Backends de grupos de instancias de VM
- Segmentos de Cloud Storage (Solo se admite si hay al menos un servicio de backend asociado al balanceador de carga, además del segmento de backend)
- Cloud Run, App Engine o Cloud Run Functions
- Conectividad híbrida
- Back-ends de Private Service Connect
Si usas un balanceador de carga de aplicaciones externo regional, un balanceador de carga de aplicaciones interno entre regiones o un balanceador de carga de aplicaciones interno regional, asegúrate de haber configurado un balanceador de carga con cualquiera de los siguientes backends admitidos:
- Backends de grupos de instancias de VM
- Cloud Run
- Conectividad híbrida
- Back-ends de Private Service Connect
Configura el proyecto.
gcloud
gcloud config set project PROJECT_ID
Permisos
Para obtener los permisos que necesitas para completar esta guía, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto:
-
Para crear recursos de balanceador de carga, como
TargetHTTPSProxy
, haz lo siguiente: Administrador de balanceadores de carga de Compute (roles/compute.loadBalancerAdmin
) -
Para usar los recursos de Certificate Manager, debes tener uno de los siguientes roles:
Propietario de Certificate Manager (
roles/certificatemanager.owner
) -
Para crear componentes de seguridad y de red, sigue estos pasos:
Administrador de red de Compute (
roles/compute.networkAdmin
) y administrador de seguridad de Compute (roles/compute.securityAdmin
) -
Para crear un proyecto (opcional):
Creador de proyectos (
roles/resourcemanager.projectCreator
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Crear los certificados raíz e intermedio
En esta sección se usa la biblioteca OpenSSL para crear el certificado raíz (ancla de confianza) y el certificado intermedio.
Un certificado raíz se encuentra en la parte superior de la cadena de certificados. Un certificado intermedio forma parte de la cadena de confianza que lleva al certificado raíz. El certificado intermedio está firmado criptográficamente por el certificado raíz. Cuando el balanceador de carga recibe un certificado de cliente, lo valida estableciendo una cadena de confianza desde el certificado de cliente hasta el ancla de confianza configurada.
Usa los siguientes comandos para crear los certificados raíz e intermedio. La creación del certificado intermedio es opcional. Sin embargo, en esta configuración, usamos el certificado intermedio para firmar el certificado de cliente.
Crea un archivo de configuración de OpenSSL.
En el siguiente ejemplo, el archivo de configuración (
example.cnf
) contiene la sección[ca_exts]
, que especifica las extensiones X.509 que marcan el certificado como adecuado para una AC. Para obtener más información sobre los requisitos de los certificados raíz e intermedios, consulta los requisitos de los certificados.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
Crea un certificado raíz X.509 con firma automática (
root.cert
). El certificado raíz se firma automáticamente con su propia clave privada (root.key
).openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
Crea la solicitud de firma de certificado (
int.req
) del certificado intermedio.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Firma la CSR para crear el certificado intermedio X.509 (
int.cert
). La CSR se firma con el certificado raíz.openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
Crear un certificado autofirmado que se pueda añadir a una lista de permitidos
Puedes crear un certificado autofirmado y añadirlo a una lista de permitidos en la configuración de confianza.
Usa el siguiente comando de OpenSSL para crear un certificado X.509 autofirmado.
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
A continuación, este certificado se añade a un campo allowlistedCertificates
en la configuración de confianza.
Dar formato a los certificados
Para incluir certificados nuevos o ya creados en un TrustStore
, formatea los certificados en una sola línea y guárdalos en variables de entorno para que se pueda hacer referencia a ellos en el archivo YAML de configuración de confianza.
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Para incluir en una configuración de confianza certificados nuevos o ya disponibles que se hayan añadido a una lista de permitidos, formatea los certificados en una sola línea y guárdalos en variables de entorno para que se puedan leer en el archivo YAML. En el caso de los certificados que estén en una lista de permitidos, usa el siguiente comando para dar formato a los certificados en una sola línea y almacenarlos en la variable de entorno ALLOWLISTED_CERT
.
export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Crear un recurso de configuración de confianza
Una configuración de confianza es un recurso que representa tu configuración de infraestructura de clave pública (PKI) en Certificate Manager.
Para crear un recurso de configuración de confianza, sigue estos pasos:
Consola
En la Google Cloud consola, ve a la página Gestor de certificados.
En la pestaña Configuraciones de confianza, haz clic en Añadir configuración de confianza.
Introduce un nombre para la configuración.
En Ubicación, selecciona Global o Regional.
La ubicación indica dónde se almacena el recurso de configuración de confianza. En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, crea un recurso global trust config. En el caso de los balanceadores de carga de aplicación externos regionales y los balanceadores de carga de aplicación internos regionales, crea un recurso de configuración de confianza regional.
Si has seleccionado Regional, selecciona la región.
En la sección Almacén de confianza, haz clic en Añadir ancla de confianza y sube el archivo de certificado codificado en PEM o copia el contenido del certificado.
Haz clic en Añadir.
En la sección Almacén de confianza, haz clic en Añadir AC intermedia y sube el archivo de certificado codificado en PEM o copia el contenido del certificado.
Este paso te permite añadir otro nivel de confianza entre el certificado raíz y el certificado de tu servidor.
Haz clic en Añadir para añadir la CA intermedia.
Opcional: En la sección Certificados incluidos en la lista de permitidos, haz clic en Añadir certificado y sube el archivo de certificado codificado en PEM o copia el contenido del certificado.
Haz clic en Añadir para añadir el certificado a la lista de permitidos.
Haz clic en Crear.
Comprueba que el nuevo recurso de configuración de confianza aparezca en la lista de configuraciones.
gcloud
Crea un archivo YAML de configuración de confianza (
trust_config.yaml
) que especifique los parámetros de configuración de confianza. Este ejemplo de configuración de confianza resource contiene un almacén de confianza con un ancla de confianza y un certificado intermedio. Lee el contenido del certificado de las variables de entorno creadas en el paso anterior Formatear los certificados.cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" EOF
Para crear un almacén de confianza con anclas de confianza o certificados intermedios adicionales, añada filas
pemCertificate
en la sección correspondiente.Opcional: Especifica el certificado que se añade al archivo YAML de configuración de confianza en el campo
allowlistedCertificates
. No necesitas un almacén de confianza para añadir un certificado a una lista de permitidas.cat << EOF >> trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
Un certificado que se añade a una lista de permitidos representa cualquier certificado que se pueda encapsular en la configuración de confianza para que siempre se considere válido. Puedes especificar varios certificados en una lista de permitidos usando varias instancias del campo
pemCertificate
.Para importar el archivo YAML de configuración de confianza, usa el comando
gcloud certificate-manager trust-configs import
:Mundial
En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, especifica
global
como la ubicación en la que se almacena el recurso de configuración de confianza.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=global
Haz los cambios siguientes:
TRUST_CONFIG_NAME
: el nombre del recurso de configuración de confianza.
regional
En el caso de los balanceadores de carga de aplicaciones externos regionales y los balanceadores de carga de aplicaciones internos regionales, especifica la región en la que se almacena el recurso de configuración de confianza.
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=LOCATION
Haz los cambios siguientes:
TRUST_CONFIG_NAME
: el nombre del recurso de configuración de confianza.LOCATION
: la región en la que se almacena el recurso de configuración de confianza. La ubicación predeterminada esglobal
.
Crear un recurso ClientAuthentication
Un recurso de autenticación de cliente (también llamado ServerTLSPolicy
) te permite especificar el modo TLS del lado del servidor y el recurso de configuración de confianza que se debe usar al validar los certificados de cliente. Cuando el cliente presenta un certificado no válido o ningún certificado al balanceador de carga, clientValidationMode
especifica cómo se gestiona la conexión del cliente. Para obtener más información, consulta Modos de validación de clientes de mTLS.
- Si
clientValidationMode
tiene el valorALLOW_INVALID_OR_MISSING_CLIENT_CERT
, todas las solicitudes se envían al backend aunque la validación falle o falte el certificado de cliente. - Cuando
clientValidationMode
se define comoREJECT_INVALID
, solo se envían al backend las solicitudes que proporcionan un certificado de cliente que se puede validar con un recursoTrustConfig
.
Para crear un recurso de autenticación de cliente (ServerTlsPolicy
),
sigue estos pasos:
Consola
En la consola, ve a la página Configuración de autenticación. Google Cloud
En la pestaña Autenticación de cliente, haz clic en Crear.
Introduce un nombre para el recurso Client Authentication.
En Ubicación, selecciona Global o Regional.
En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, define la ubicación como global. En el caso de los balanceadores de carga de aplicación externos regionales y los balanceadores de carga de aplicación internos regionales, define la ubicación como la región en la que se ha configurado el balanceador de carga.
En Modo de autenticación de cliente, selecciona Balanceo de carga.
Selecciona un modo de validación de cliente.
Selecciona el recurso de configuración de confianza que has creado anteriormente.
Haz clic en Crear.
Comprueba que se muestre Autenticación de cliente (ServerTlsPolicy
).
gcloud
En función de cómo quieras gestionar la conexión, selecciona una de las siguientes opciones para definir el recurso de autenticación de cliente (
ServerTlsPolicy
) en formato YAML.Opción 1:
clientValidationMode
está configurado comoALLOW_INVALID_OR_MISSING_CLIENT_CERT
.Mundial
En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, crea un archivo YAML que especifique de forma declarativa el modo de validación de cliente y un recurso de configuración de confianza global:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
regional
En el caso de los balanceadores de carga de aplicaciones externos regionales y los balanceadores de carga de aplicaciones internos regionales, crea un archivo YAML que especifique de forma declarativa el modo de validación de clientes y un recurso de configuración de confianza regional:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Opción 2:
clientValidationMode
está configurado comoREJECT_INVALID
.Mundial
En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, crea un archivo YAML que especifique de forma declarativa el modo de validación de cliente y un recurso de configuración de confianza global:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
regional
En el caso de los balanceadores de carga de aplicaciones externos regionales y los balanceadores de carga de aplicaciones internos regionales, crea un archivo YAML que especifique de forma declarativa el modo de validación de clientes y un recurso de configuración de confianza regional:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Haz los cambios siguientes:
SERVER_TLS_POLICY_NAME
: el nombre del recurso de autenticación de cliente (ServerTlsPolicy
).PROJECT_ID
: el ID de tu proyecto de Google Cloud .LOCATION
: en el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, usaglobal
. En el caso de los balanceadores de carga de aplicación externos regionales o los balanceadores de carga de aplicación internos regionales, usa la región en la que hayas configurado el balanceador de carga.TRUST_CONFIG_NAME
: el nombre del recurso de configuración de confianza que has creado anteriormente.
Para importar el recurso
ServerTlsPolicy
de autenticación de cliente, usa el comandogcloud network-security server-tls-policies import
:Mundial
En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, asigna el valor
global
a la marca--location
.gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
Haz los cambios siguientes:
SERVER_TLS_POLICY_NAME
: el nombre del recurso de autenticación de cliente (ServerTlsPolicy
).regional
En el caso de los balanceadores de carga de aplicación externos regionales y los balanceadores de carga de aplicación internos regionales, define la marca
--location
en la región en la que esté configurado el balanceador de carga.gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=LOCATION
Haz los cambios siguientes:
SERVER_TLS_POLICY_NAME
: el nombre del recurso de autenticación de cliente (ServerTlsPolicy
).Opcional: Para enumerar todos los recursos de autenticación de cliente (
ServerTlsPolicies
), usa el comandogcloud network-security server-tls-policies list
:gcloud network-security server-tls-policies list \ --location=LOCATION
Haz los cambios siguientes:
LOCATION
: En el caso de los balanceadores de carga de aplicación externos globales, los balanceadores de carga de aplicación clásicos y los balanceadores de carga de aplicación internos entre regiones, usaglobal
. En el caso de los balanceadores de carga de aplicación externos regionales o los balanceadores de carga de aplicación internos regionales, usa la región en la que hayas configurado el balanceador de carga.
Asocia el recurso ClientAuthentication al balanceador de carga
Para que la autenticación TLS mutua funcione, después de configurar el balanceador de carga, debes asociar el recurso de autenticación de cliente (ServerTLSPolicy
) al recurso de proxy HTTPS de destino del balanceador de carga.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
En la lista de balanceadores de carga, selecciona el balanceador de carga al que quieras adjuntar el recurso de autenticación de cliente (
ServerTLSPolicy
).Haz clic en
Editar.En la sección Configuración de frontend de un frontend HTTPS, despliega la sección Mostrar funciones avanzadas.
En la lista Client Authentication (Autenticación de cliente), selecciona el recurso Client Authentication (Autenticación de cliente).
Haz clic en Listo.
Haz clic en Actualizar.
gcloud
Para enumerar todos los recursos de proxy HTTPS de destino de tu proyecto, usa el comando
gcloud compute target-https-proxies list
:gcloud compute target-https-proxies list
Anota el nombre del proxy HTTPS de destino al que quieras adjuntar el recurso
ServerTLSPolicy
. En los pasos siguientes, nos referiremos a este nombre comoTARGET_HTTPS_PROXY_NAME
.Para exportar la configuración de un proxy HTTPS de destino a un archivo, usa el comando
gcloud compute target-https-proxies export
.Mundial
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --global
Haz los cambios siguientes:
TARGET_HTTPS_PROXY_NAME
: el nombre del proxy de destino.TARGET_PROXY_FILENAME
: el nombre del archivo de configuración del proxy de destino en formato YAML. Por ejemplo,mtls_target_proxy.yaml
.
regional
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --region=REGION
Haz los cambios siguientes:
TARGET_HTTPS_PROXY_NAME
: el nombre del proxy de destino.TARGET_PROXY_FILENAME
: el nombre del archivo de configuración del proxy de destino en formato YAML. Por ejemplo,mtls_target_proxy.yaml
REGION
: la región en la que ha configurado el balanceador de carga.
Para obtener una lista de todos los recursos de autenticación de cliente (
ServerTlsPolicy
), usa el comandogcloud network-security server-tls-policies list
:gcloud network-security server-tls-policies list \ --location=LOCATION
Haz los cambios siguientes:
LOCATION
: para el balanceador de carga de aplicación interno entre regiones, el balanceador de carga de aplicación externo global o el balanceador de carga de aplicación clásico, usaglobal
. En el caso de los balanceadores de carga de aplicación externos regionales o los balanceadores de carga de aplicación internos regionales, usa la región en la que hayas configurado el balanceador de carga.Anota el nombre del recurso de autenticación de cliente (
ServerTLSPolicy
) para configurar mTLS. En el siguiente paso, se hará referencia a este nombre comoSERVER_TLS_POLICY_NAME
.Añade la autenticación de cliente (
ServerTlsPolicy
) al proxy HTTPS de destino.echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
Haz los cambios siguientes:
PROJECT_ID
: el ID de tu proyecto de Google Cloud .LOCATION
: para los balanceadores de carga de aplicación externos globales o los balanceadores de carga de aplicación clásicos, y los balanceadores de carga de aplicación internos multirregión, usaglobal
. En el caso de los balanceadores de carga de aplicación externos regionales o los balanceadores de carga de aplicación internos regionales, usa la región en la que hayas configurado el balanceador de carga.SERVER_TLS_POLICY_NAME
: el nombre del recurso de autenticación de cliente (ServerTLSPolicy
).TARGET_PROXY_FILENAME
: el nombre del archivo de configuración del proxy de destino en formato YAML.
Para importar la configuración de un proxy HTTPS de destino desde un archivo, usa el comando
gcloud compute target-https-proxies import
.Mundial
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --global
Haz los cambios siguientes:
TARGET_HTTPS_PROXY_NAME
: el nombre del proxy de destino.TARGET_PROXY_FILENAME
: el nombre del archivo de configuración del proxy de destino en formato YAML. Por ejemplo,mtls_target_proxy.yaml
.
regional
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --region=REGION
Haz los cambios siguientes:
TARGET_HTTPS_PROXY_NAME
: el nombre del proxy de destino.TARGET_PROXY_FILENAME
: el nombre del archivo de configuración del proxy de destino en formato YAML. Por ejemplo,mtls_target_proxy.yaml
REGION
: la región en la que ha configurado el balanceador de carga.
Añadir encabezados personalizados de mTLS
Cuando habilitas mTLS, puedes transferir información sobre la conexión mTLS mediante encabezados personalizados. También puedes habilitar el registro para que los errores de conexión mTLS se registren.
Añadir encabezados personalizados de mTLS a servicios de backend
En el caso de los balanceadores de carga de aplicación externos globales o los balanceadores de carga de aplicación clásicos, puedes usar encabezados personalizados para transferir información sobre la conexión mTLS a los servicios de backend.
Para enumerar todos los servicios de backend del proyecto, usa el comando
gcloud compute backend-services list
:gcloud compute backend-services list
Anota el nombre del servicio de backend para habilitar los encabezados personalizados y el registro. En el siguiente paso, se hará referencia a este nombre como
BACKEND_SERVICE
.Para actualizar el servicio de backend, usa el comando
gcloud compute backend-services update
:gcloud compute backend-services update BACKEND_SERVICE \ --global \ --enable-logging \ --logging-sample-rate=1 \ --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \ --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \ --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \ --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \ --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \ --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \ --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \ --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \ --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \ --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
Añadir encabezados personalizados de mTLS al mapa de URLs
En el caso de los balanceadores de carga de aplicación internos entre regiones, los balanceadores de carga de aplicación externos regionales o los balanceadores de carga de aplicación internos regionales, puedes usar encabezados personalizados para transferir información sobre la conexión mTLS al mapa de URLs.
Para ver una lista con todos los mapas de URLs del proyecto, usa el comando
gcloud compute url-maps list
:
gcloud compute url-maps list
Anota el nombre del mapa de URLs para habilitar los encabezados personalizados y el registro.
En el siguiente paso, se hará referencia a este nombre como URL_MAP_NAME
.
Mundial
Para editar el mapa de URLs de un balanceador de carga de aplicación interno entre regiones, usa el comando
gcloud compute
url-maps edit
:
gcloud compute url-maps edit URL_MAP_NAME --global
A continuación, se muestra un archivo YAML de ejemplo que explica cómo usar variables
en encabezados de solicitud personalizados (requestHeadersToAdd
). Puedes usar las mismas variables para enviar encabezados de respuesta personalizados
(responseHeadersToAdd
).
headerAction: requestHeadersToAdd: - headerName: "X-Client-Cert-Present" headerValue: "{client_cert_present}" - headerName: "X-Client-Cert-Chain-Verified" headerValue: "{client_cert_chain_verified}" - headerName: "X-Client-Cert-Error" headerValue: "{client_cert_error}" - headerName: "X-Client-Cert-Hash" headerValue: "{client_cert_sha256_fingerprint}" - headerName: "X-Client-Cert-Serial-Number" headerValue: "{client_cert_serial_number}" - headerName: "X-Client-Cert-SPIFFE" headerValue: "{client_cert_spiffe_id}" - headerName: "X-Client-Cert-URI-SANs" headerValue: "{client_cert_uri_sans}" - headerName: "X-Client-Cert-DNSName-SANs" headerValue: "{client_cert_dnsname_sans}" - headerName: "X-Client-Cert-Valid-Not-Before" headerValue: "{client_cert_valid_not_before}" - headerName: "X-Client-Cert-Valid-Not-After" headerValue: "{client_cert_valid_not_after}" - headerName: "X-Client-Cert-Issuer-Dn" headerValue: "{client_cert_issuer_dn}" - headerName: "X-Client-Cert-Subject-Dn" headerValue: "{client_cert_subject_dn}" - headerName: "X-Client-Cert-Leaf" headerValue: "{client_cert_leaf}" - headerName: "X-Client-Cert-Chain" headerValue: "{client_cert_chain}"
regional
Para editar el mapa de URLs de un balanceador de carga de aplicación externo regional o de un balanceador de carga de aplicación interno regional, usa el comando gcloud compute
url-maps edit
:
gcloud compute url-maps edit URL_MAP_NAME --region=REGION
A continuación, se muestra un archivo YAML de ejemplo que explica cómo usar variables en encabezados de solicitud personalizados (requestHeadersToAdd
). Puedes usar las mismas variables para enviar encabezados de respuesta personalizados (responseHeadersToAdd
).
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1 name: regional-lb-map region: region/REGION headerAction: requestHeadersToAdd: - headerName: "X-Client-Cert-Present" headerValue: "{client_cert_present}" - headerName: "X-Client-Cert-Chain-Verified" headerValue: "{client_cert_chain_verified}" - headerName: "X-Client-Cert-Error" headerValue: "{client_cert_error}" - headerName: "X-Client-Cert-Hash" headerValue: "{client_cert_sha256_fingerprint}" - headerName: "X-Client-Cert-Serial-Number" headerValue: "{client_cert_serial_number}" - headerName: "X-Client-Cert-SPIFFE" headerValue: "{client_cert_spiffe_id}" - headerName: "X-Client-Cert-URI-SANs" headerValue: "{client_cert_uri_sans}" - headerName: "X-Client-Cert-DNSName-SANs" headerValue: "{client_cert_dnsname_sans}" - headerName: "X-Client-Cert-Valid-Not-Before" headerValue: "{client_cert_valid_not_before}" - headerName: "X-Client-Cert-Valid-Not-After" headerValue: "{client_cert_valid_not_after}" - headerName: "X-Client-Cert-Issuer-Dn" headerValue: "{client_cert_issuer_dn}" - headerName: "X-Client-Cert-Subject-Dn" headerValue: "{client_cert_subject_dn}" - headerName: "X-Client-Cert-Leaf" headerValue: "{client_cert_leaf}" - headerName: "X-Client-Cert-Chain" headerValue: "{client_cert_chain}"
Firmar el certificado de cliente con el certificado intermedio
En esta sección se ofrece una opción de configuración adicional para generar un certificado de cliente (hoja). Si ya has creado un recurso TrustConfig que contiene un certificado intermedio, haz lo siguiente:
Crea un archivo de configuración para generar la CSR del certificado de cliente.
El siguiente archivo de configuración (
client.config
) contiene la sección[extension_requirements]
, que especifica las extensiones X.509 que se deben incluir en la CSR. Para obtener más información sobre los requisitos de los certificados de cliente, consulta Requisitos de los certificados.cat > client.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOF
Si quieres adjuntar una identidad SPIFFE al archivo de configuración, haz lo siguiente:
Añade un campo
subjectAltName
a la sección[extension_requirements]
de la siguiente manera:subjectAltName = @sans_list
Añade una nueva sección (
[sans_list]
) en la parte inferior del archivoclient.config
de la siguiente manera:[sans_list] URI.1 = spiffe://example.com/test-identity
Crea la CSR (
client.csr
) del certificado de cliente.openssl req -new \ -config client.config \ -keyout client.key -out client.csr
Firma la CSR para emitir el certificado de cliente X.509 (
client.cert
). El certificado intermedio firma la CSR.openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile client.config \ -extensions extension_requirements \ -in client.csr -out client.cert
Envía una solicitud HTTPS segura a la dirección IP del balanceador de carga mediante el certificado SSL del lado del cliente. El cliente presenta su certificado (
client.cert
) para autenticarse en el balanceador de carga.curl -v --key client.key --cert client.cert https://IP_ADDRESS
Sustituye IP_ADDRESS por la dirección IP del balanceador de carga.