En esta página, se proporcionan instrucciones para configurar la mTLS de backend con certificados autoadministrados para los balanceadores de cargas de aplicaciones externos globales.
Los pasos para configurar la mTLS del backend son similares a los de la TLS autenticada del backend, excepto que también debes crear un certificado para el balanceador de cargas. Este certificado, también conocido como certificado de cliente, se adjunta al recurso de configuración de autenticación de backend. El balanceador de cargas usa este certificado de cliente para autenticarse en los backends.
Para configurar el mTLS de backend, completa los pasos que se indican en las siguientes secciones:
- Crea un recurso de configuración de confianza que conste de certificados raíz y certificados intermedios.
- Crea un certificado de cliente y súbelo al administrador de certificados.
- Crea un recurso de configuración de autenticación de backend que haga referencia tanto a la configuración de confianza como al certificado de cliente.
- Adjunta el recurso de configuración de autenticación de backend al servicio de backend del balanceador de cargas.
Antes de comenzar
- Revisa la descripción general de la TLS con autenticación de backend y la mTLS de backend.
- Revisa Administra la configuración de confianza.
Si deseas seguir las instrucciones de esta guía con Google Cloud CLI, debes instalarla. Encontrarás comandos relacionados con el balanceo de cargas en las referencias de la API y gcloud CLI gcloud.
Si no ejecutaste la CLI de gcloud antes, ejecuta primero el comando
gcloud init
para autenticarte.Habilita las siguientes APIs: API de Compute Engine, API de Certificate Manager, API de Network Security y API de Network Services. Para obtener más información, consulta Habilita las APIs.
Configura un balanceador de cargas de aplicaciones externo global con cualquiera de los siguientes backends compatibles:
- Backends de grupos de instancias de VM
- NEG de conectividad híbrida
- NEG zonales
Permisos
En esta sección, se enumeran los permisos necesarios para configurar la mTLS de backend.Operación | Permiso |
---|---|
Crea una configuración de confianza | certificatemanager.trustconfigs.create en el Google Cloud proyecto de destino |
Crear un certificado de cliente | certificatemanager.certs.create en el Google Cloud proyecto de destino |
Crea un recurso de configuración de autenticación de backend |
certificatemanager.certs.use en el certificado de destinocertificatemanager.trustconfigs.use en la configuración de confianza de destinonetworksecurity.backendauthenticationconfigs.create en el proyecto Google Cloud de destino |
Adjunta el recurso de configuración de autenticación de backend al servicio de backend del balanceador de cargas |
compute.backendservice.update en el servicio de backend de destinonetworksecurity.backendauthenticationconfigs.use en el
recurso de configuración de autenticación de backend de destino |
Descripción general de la configuración
En las siguientes secciones, se describen los pasos para configurar la mTLS de backend según la arquitectura que se muestra en el siguiente diagrama:
Crea 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 se remonta al certificado raíz. El certificado intermedio está firmado de forma criptográfica por el certificado raíz. Cuando el balanceador de cargas recibe un certificado de servidor, lo valida estableciendo una cadena de confianza desde el certificado de servidor hasta la entidad de certificación configurada.
Usa los siguientes comandos para crear los certificados raíz e intermedio.
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 extensiones X.509 que marcan el certificado como adecuado para una CA. Para obtener más información sobre los requisitos de los certificados raíz e intermedios, consulta 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=serverAuth EOF
Crea un certificado raíz X.509 autofirmado (
root.cert
). El certificado raíz se autofirma 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 (CSR)
int.req
para el 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
Da formato a los certificados
Para incluir certificados nuevos o existentes en un almacén de confianza, debes dar formato a los certificados en una sola línea y almacenarlos en variables de entorno para que se puedan 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')
Crea un recurso de configuración de confianza
Una configuración de confianza es un recurso que representa la configuración de tu infraestructura de clave pública (PKI) en Certificate Manager.
Para crear un recurso de configuración de confianza, completa los siguientes pasos:
Console
En la consola de Google Cloud , ve a la página Certificate Manager.
En la pestaña Trust Configs, haz clic en Add Trust Config.
Ingresa un nombre para la configuración.
En Ubicación, selecciona Global. La ubicación indica dónde se almacena el recurso de configuración de confianza. En el caso de los balanceadores de cargas de aplicaciones externos globales, debes crear un recurso de configuración de confianza global.
En la sección Almacén de confianza, haz clic en Agregar ancla de confianza y sube el archivo de certificado con codificación PEM o copia el contenido del certificado.
Haz clic en Agregar.
En la sección Almacén de confianza, haz clic en Agregar CA intermedia y sube el archivo de certificado con codificación PEM o copia el contenido del certificado. Este paso te permite agregar otro nivel de confianza entre el certificado raíz y el certificado del servidor.
Haz clic en Agregar para agregar la CA intermedia.
Para agregar el certificado que agregaste a la lista de entidades permitidas, haz clic en Agregar.
Haz clic en Crear.
Verifica 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 recurso de configuración de confianza de ejemplo contiene un almacén de confianza con un ancla de confianza y un certificado intermedio. Este ejemplo de recurso de configuración de confianza lee el contenido del certificado de las variables de entorno creadas en el paso anterior Da formato a 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 adicionales o certificados intermedios, agrega filas
pemCertificate
en la sección adecuada.Para importar el archivo YAML de configuración de confianza, usa el comando
gcloud certificate-manager trust-configs import
:Para los balanceadores de cargas de aplicaciones externos globales, 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
Reemplaza lo siguiente:
TRUST_CONFIG_NAME
: el nombre del recurso de configuración de confianza
Crear un certificado de cliente
En mTLS de backend, el balanceador de cargas actúa como cliente y el backend actúa como servidor.
Para habilitar la mTLS de backend, el balanceador de cargas debe demostrar su identidad al backend. Esta autenticación se lleva a cabo con un certificado de cliente que el balanceador de cargas presenta al backend. El servidor de backend debe validar el certificado del cliente con su propia cadena de confianza.
Cuando se conecta a un servidor de backend, el balanceador de cargas establece la indicación de nombre del servidor (SNI) en el nombre de host especificado en la configuración de TLS. El servidor de backend selecciona el certificado SSL/TLS adecuado según este valor de SNI. El balanceador de cargas espera que el valor de SNI coincida con un nombre alternativo del sujeto (SAN) que se encuentre en el certificado del servidor de backend.
Los certificados de cliente pueden ser certificados administrados de una CA privada a través de Certificate Authority Service o certificados de PKI privados autoadministrados. En este ejemplo, el certificado de cliente se emite con certificados autoadministrados. En esta sección, se usa la biblioteca OpenSSL para crear el certificado de la CA raíz y el certificado de cliente.
Para crear un certificado de cliente, completa los siguientes pasos:
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 extensiones X.509 que marcan el certificado como adecuado para una autoridad certificadora (CA). El atributoextendedKeyUsage
se establece enclientAuth
. Para obtener más información sobre los requisitos de los certificados raíz y los certificados intermedios, consulta 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 de CA raíz X.509 autofirmado (
root.cert
). El certificado raíz se autofirma 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 un archivo de configuración para generar el 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 incluirán en la CSR. Para obtener más información sobre los requisitos de los certificados de cliente, consulta Requisitos de certificación.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
Crea la CSR (
client.csr
) para el certificado de cliente.openssl req -new \ -config client.config \ -keyout client.key -out client.csr
Crea el certificado de cliente (
client.cert
) a partir de la CSR. La CSR está firmada por el certificado de la CA raíz para emitir el certificado de cliente X.509.openssl x509 -req \ -CAkey root.key -CA root.cert \ -days 365 \ -extfile client.config \ -extensions extension_requirements \ -in client.csr -out client.cert
Sube el certificado de cliente al Administrador de certificados
Para subir el certificado del cliente a Certificate Manager, completa los siguientes pasos:
Console
En la consola de Google Cloud , ve a la página Certificate Manager.
En la pestaña Certificados, haz clic en Agregar certificado.
Ingrese un nombre para el certificado.
Este nombre debe ser único para el proyecto.
Opcional: Ingresa una descripción para el certificado. La descripción te ayuda a identificar un certificado específico más adelante.
En Ubicación, selecciona Global.
En Alcance, selecciona Autenticación del cliente.
En Tipo de certificado, elige Crear certificado autoadministrado.
En el campo Certificado, sube un archivo de certificado con codificación PEM o copia y pega el contenido de un certificado con codificación PEM.
En el campo Certificado de clave privada, sube una clave privada con codificación PEM que no esté protegida con una frase de contraseña o copia y pega el contenido de la clave privada con codificación PEM.
Especifica una etiqueta para asociar al certificado. Si es necesario, puedes agregar más de una etiqueta. Para agregar una etiqueta, haz clic en el botón
Agregar etiqueta y especifica unkey
y unvalue
para tu etiqueta.Haz clic en Crear. Verifica que el certificado nuevo aparezca en la lista de certificados.
gcloud
Para subir el certificado de cliente al Administrador de certificados, usa el comando
gcloud certificate-manager certificates create
. El alcance de este certificado esclient-auth
, lo que indica que se usa como certificado de cliente en la mTLS de backend.gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \ --certificate-file=client.cert \ --private-key-file=client.key \ --scope=client-auth \ --global
Reemplaza lo siguiente:
CLIENT_CERTIFICATE_NAME
: Es el nombre del recurso de certificado del cliente. El recurso de configuración de autenticación de backend usa este certificado de cliente con el alcanceclient-auth
.
Crea un recurso de configuración de autenticación de backend
Para crear un recurso de Backend Authentication Config (BackendAuthenticationConfig
), completa los siguientes pasos.
Console
- En la consola de Google Cloud , ve a la página Configuración de autenticación.
- En la pestaña Backend Authentication, haz clic en Create.
- Ingresa un nombre para el recurso de configuración de autenticación de backend.
- Selecciona el recurso del certificado de cliente que creaste anteriormente.
- Opcional: Selecciona las raíces de confianza públicas.
- Selecciona el recurso de configuración de confianza que creaste antes.
- Haz clic en Crear.
Verifica que se muestre el recurso de configuración de autenticación de backend.
gcloud
Crea un archivo YAML que especifique de forma declarativa los diferentes atributos del recurso de configuración de autenticación de backend.
Adjunta el certificado de cliente al recurso de configuración de autenticación de backend para habilitar la mTLS del backend.
cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME clientCertificate: projects/PROJECT_ID/locations/global/certificates/CLIENT_ CERTIFICATE_NAME wellKnownRoots: PUBLIC_ROOTS EOF
Reemplaza lo siguiente:
BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: Es el nombre del archivo YAML en el que se define el recurso de configuración de autenticación de backend.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .BACKEND_AUTH_CONFIG_NAME
: El nombre del recurso de configuración de autenticación de backendTRUST_CONFIG_NAME
: Es el nombre del recurso de configuración de confianza que creaste antes.CLIENT_CERTIFICATE_NAME
: Es el nombre del recurso de certificado de cliente que creaste antes.
Para importar el recurso de configuración de autenticación de backend, usa el comando
gcloud network-security backend-authentication-configs import
:gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \ --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \ --location=global
Reemplaza lo siguiente:
BACKEND_AUTH_CONFIG_NAME
: El nombre del recurso de configuración de autenticación de backendBACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: Es el nombre del archivo YAML en el que se define el recurso de Backend Authentication Config.
Adjunta el recurso de configuración de autenticación de backend al servicio de backend del balanceador de cargas
Para adjuntar el recurso de configuración de autenticación de backend (BackendAuthenticationConfig
) al servicio de backend del balanceador de cargas, completa los siguientes pasos.
Console
En la consola de Google Cloud , ve a la página Balanceo de cargas.
En la pestaña Backends, selecciona el servicio de backend para el que necesitas habilitar la autenticación de backend con TLS y la mTLS de backend.
Haz clic en
Editar.Expande la sección Configuración avanzada.
En la sección Autenticación de backend, selecciona la casilla de verificación Habilitar.
Opcional: Especifica el nombre de host de SNI y los SAN aceptados para validar el certificado de backend.
Para adjuntar el recurso de configuración de autenticación de backend al servicio de backend, en la lista Configuración de autenticación de backend, selecciona el recurso de configuración de autenticación de backend.
Haz clic en Continuar.
Para actualizar la configuración del servicio de backend, haz clic en Actualizar.
gcloud
Para enumerar todos los recursos de servicio de backend en tu proyecto, usa el comando
gcloud compute backend-services list
.gcloud compute backend-services list
Toma nota del nombre del servicio de backend al que se adjuntará el recurso
BackendAuthenticationConfig
. Este nombre se denominaBACKEND_SERVICE_NAME
en los siguientes pasos.Para exportar la configuración del servicio de backend a un archivo, usa el comando
gcloud beta compute backend-services export
.gcloud beta compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_FILENAME.yaml \ --global
Reemplaza lo siguiente:
BACKEND_SERVICE_NAME
: el nombre del servicio de backend.BACKEND_SERVICE_FILENAME
: Es el nombre y la ruta de acceso a un archivo YAML en el que se exporta la configuración del servicio de backend.
Actualiza el atributo
tlsSettings
del servicio de backend para que apunte al recurso de configuración de autenticación de backend. Además, puedes configurar el nombre de host de SNI y los SAN aceptados en el servicio de backend para validar el certificado de backend.cat << EOF >> BACKEND_SERVICE_FILENAME.yaml tlsSettings: authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME sni: examplepetstore.com subjectAltNames: - dnsName: examplepetstore.com - dnsName: api.examplepetstore.com EOF
Los valores de SNI y SAN en la declaración de YAML anterior solo se proporcionan como ejemplos. Puedes reemplazarlos por valores del mundo real que sean relevantes para tu configuración.
Reemplaza lo siguiente:
BACKEND_SERVICE_FILENAME
: Es el nombre del archivo YAML en el que se exporta la configuración del servicio de backend.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .BACKEND_AUTH_CONFIG_NAME
: El nombre del recurso de configuración de autenticación de backend
Para importar la configuración actualizada del servicio de backend desde un archivo, usa el comando
gcloud beta compute backend-services import
.gcloud beta compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_FILENAME.yaml \ --global
Reemplaza lo siguiente:
BACKEND_SERVICE_NAME
: el nombre del servicio de backend.BACKEND_SERVICE_FILENAME
: el nombre del archivo YAML de configuración del servicio de backend
Crea un certificado de servidor de backend
En esta sección, se proporciona una opción de configuración adicional para crear un certificado de servidor (hoja) firmado por el certificado intermedio, que forma parte de la configuración de confianza. Esto garantiza que se pueda establecer una cadena de confianza desde el certificado del servidor hasta la entidad de certificación raíz.
Si ya creaste un recurso de configuración de confianza que contiene un certificado intermedio, haz lo siguiente:
Crea un archivo de configuración para generar el CSR del certificado del servidor.
El siguiente archivo de configuración (
server.config
) contiene la sección[extension_requirements]
, que especifica las extensiones X.509 que se incluirán en la CSR. Para obtener más información sobre los requisitos de los certificados de servidor, consulta Requisitos de los certificados.cat > server.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 = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = examplepetstore.com DNS.2 = api.examplepetstore.com [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = examplepetstore.com emailAddress = test@examplepetstore.com EOF
Crea la CSR (
server.csr
) para el certificado del servidor.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -config server.config \ -keyout server.key -out server.csr
Firma la CSR para emitir el certificado del servidor X.509 (
server.cert
). El certificado intermedio firma la CSR.openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile server.config \ -extensions extension_requirements \ -in server.csr -out server.cert
Cuando el balanceador de cargas se conecta al servidor de backend, este presenta su certificado (
server.cert
) para autenticarse en el balanceador de cargas, lo que completa el proceso de autenticación de backend.
Opciones de configuración adicionales de SSL en un servidor web Apache
En esta sección opcional, se explica el proceso para actualizar las opciones de configuración de SSL en un servidor Apache según los certificados de cliente y servidor que creaste anteriormente.-
Copia la clave privada del servidor (
server.key
) y el certificado del servidor (server.cert
) en el servidor web de Apache.cat > server.key << EOF -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- EOF sudo cp ./server.key /etc/ssl/private/server.key
Reemplaza
[...]
por la clave privada del servidor con codificación PEM que creaste antes.cat > server.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./server.cert /etc/ssl/certs/server.cert
Reemplaza
[...]
por el certificado del servidor codificado en PEM que creaste antes. -
Sube el certificado de cliente a la configuración de confianza del servidor para validar el certificado de cliente.
cat > client.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./client.cert /etc/ssl/certs/client.cert
Reemplaza [...] por el certificado de cliente codificado en PEM que creaste antes.
-
Actualiza la configuración de SSL del servidor web Apache.
Actualiza la configuración SSL de Apache para habilitar el tráfico HTTPS con el certificado SSL y la clave privada especificados.
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLCertificateFile /etc/ssl/certs/server.cert SSLCertificateKeyFile /etc/ssl/private/server.key ----
Actualiza la configuración de SSL de Apache para que requiera la autenticación del certificado de cliente y especifica el certificado de CA para la validación.
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile /etc/ssl/certs/client.cert ----
-
Vuelve a generar el hash de los certificados de CA.
sudo c_rehash /etc/ssl/certs/
-
Reinicia el servidor web Apache para aplicar los cambios.
sudo systemctl restart apache2.service