Cuando un balanceador de carga se conecta a backends que se encuentran en Google Cloud, el balanceador de carga acepta cualquier certificado que presenten tus backends. En estos casos, el balanceador de carga no realiza ninguna validación de certificados.
Con TLS autenticado por backend o la autenticación de backend, el balanceador de carga puede verificar la identidad de los backends a los que se conecta. Además, con mTLS de backend, el balanceador de carga puede demostrar su identidad a los backends mediante un certificado TLS de cliente.
En el siguiente diagrama se muestra la diferencia entre el mTLS de frontend y el de backend, centrándose en el rol del balanceador de carga en cada caso. En mTLS de frontend, el balanceador de carga actúa como servidor y verifica la identidad del cliente. En la autenticación mTLS de backend, el balanceador de carga actúa como cliente y demuestra su identidad al backend.
mTLS funciona de forma independiente en el frontend y el backend. Puedes configurar mTLS en el frontend, el backend o ambos.
En este documento se ofrece una descripción general de TLS autenticado por backend y de mTLS de backend. Para obtener más información sobre mTLS de frontend, consulta el resumen de TLS mutuo.
Se pueden configurar TLS autenticado de backend y mTLS de backend en el recurso de servicio de backend de los balanceadores de carga de aplicación externos globales.
Funciones
La autenticación mutua de TLS usa la infraestructura de clave pública (PKI) para autenticar la identidad de las entidades que se comunican a través de la red. La infraestructura incluye tres componentes: un cliente, un servidor y una autoridad de certificación (CA). TLS autenticado de backend y mTLS de backend añaden las siguientes funciones a los balanceadores de carga de aplicaciones:
El balanceador de carga puede validar los certificados presentados por los back-ends con tus propios anclajes de confianza. Puedes subir varios anclajes de confianza para habilitar una migración fluida de una infraestructura de clave pública anterior a una nueva sin tiempo de inactividad.
El balanceador de carga puede validar los certificados TLS de los back-ends con respecto a las raíces de confianza públicas (infraestructura de clave pública web).
Puedes configurar certificados intermedios además de tus anclas de confianza para ayudar a crear la ruta de validación de certificados de backend. El uso de certificados intermedios significa que tus servidores backend no tienen que proporcionar la cadena de certificados completa.
Puedes configurar un nombre de host de indicación de nombre de servidor (SNI) de TLS para tu servicio de backend. Durante la negociación de TLS, el balanceador de carga incluye este nombre de host SNI en el mensaje
ClientHello
que envía al backend. A continuación, el backend responde con su certificado TLS y el balanceador de carga verifica que al menos uno de los campos de nombre alternativo del sujeto (SAN) de este certificado coincida con el nombre de host o con cualquiera de los campos SAN configurados para el servicio de backend.Puedes configurar el servicio de backend de tu balanceador de carga para que use mTLS de forma que el balanceador de carga pueda demostrar su identidad a los backends. Esta autenticación se lleva a cabo mediante un certificado de cliente (balanceador de carga) que el balanceador de carga presenta al backend.
Requisitos de los certificados
Cuando configures certificados para TLS autenticado de backend y mTLS de backend, asegúrate de que cumplan estos requisitos:
Las herramientas de criptografía modernas son la base de la autenticación mTLS. Los certificados deben usar los algoritmos RSA o ECDSA para el intercambio de claves. Los algoritmos de cifrado con hash deben usar SHA-256 o una función de hash criptográfica más segura. No se admiten algoritmos hash como MD4, MD5 y SHA-1.
Los certificados de servidor hoja proporcionados por el backend deben cumplir los siguientes requisitos:
- La extensión Restricciones básicas
no debe contener
CA=true
. - La extensión Uso mejorado de claves debe contener
serverAuth
. - La extensión Uso mejorado de claves no debe contener los campos
codeSigning
,timeStamping
niOCSPSigning
. - El certificado no debe haber caducado.
- La extensión Restricciones básicas
no debe contener
En el caso de los certificados de cliente hoja (balanceador de carga) que se usan en mTLS de backend, el certificado debe ser un recurso de certificado de Certificate Manager. El ámbito de este certificado debe ser
client-auth
, lo que indica que se usa como certificado de cliente en mTLS de backend.- La extensión Restricciones básicas
no debe contener
CA=true
. - La extensión Uso mejorado de claves debe contener
clientAuth
. - La extensión Uso mejorado de claves no debe contener los campos
codeSigning
,timeStamping
niOCSPSigning
. - El certificado no debe haber caducado.
- La extensión Restricciones básicas
no debe contener
Los certificados raíz e intermedios que se usan con TLS autenticado por backend deben cumplir los siguientes requisitos:
- La extensión Restricciones básicas
debe contener
CA=true
. - La extensión Uso de clave
debe tener el valor
keyCertSign
. - La extensión Uso mejorado de claves debe contener el campo
serverAuth
. - El certificado no debe haber caducado.
- La extensión Restricciones básicas
debe contener
Componentes clave de TLS autenticado de backend y mTLS de backend
Con TLS autenticado por backend, el balanceador de carga puede verificar la identidad de los backends a los que se conecta. Puedes configurar TLS autenticado de backend en un balanceador de carga HTTP(S) que use HTTPS o HTTP/2 como protocolo de servicio de backend. Si no configuras TLS autenticado por backend, el balanceador de carga aceptará cualquier certificado del backend. Con la autenticación mutua de TLS (mTLS) de backend, también puede configurar el balanceador de carga para que presente su propio certificado de cliente al backend, que este puede usar para autenticar el balanceador de carga.
Para configurar TLS autenticado por backend, debes hacer lo siguiente:
- Crea un recurso de configuración de confianza.
- Crea un recurso Backend Authentication Config.
- Actualiza el atributo de configuración de TLS en el servicio de backend para que apunte al recurso de configuración de autenticación de backend.
Para configurar mTLS de backend, debes crear un certificado de cliente y adjuntarlo al recurso de configuración de autenticación de backend. No puedes adjuntar el certificado de cliente después de crear el recurso Backend Authentication Config.
En el siguiente diagrama se muestran los diferentes componentes, conectados al servicio backend de un balanceador de carga de aplicaciones, que habilitan TLS autenticado de backend y mTLS de backend.
La información que se proporciona a continuación ofrece una descripción general de los diferentes componentes que se usan para configurar TLS autenticado de backend y mTLS de backend.
Configuración de confianza
Para autenticar los certificados de servidor que tu backend presenta al balanceador de carga, este debe configurarse con certificados X.509 que establezcan una cadena de confianza con el emisor del certificado del backend. Para configurar la confianza, debes usar un TrustConfig
recurso, que expresa
toda la configuración de confianza y contiene un único almacén de confianza.
Un almacén de confianza encapsula un ancla de confianza (certificado raíz) y, opcionalmente, uno o varios certificados intermedios. Un ancla de confianza es un certificado que representa una raíz de confianza. Un certificado de servidor válido debe mostrar una cadena de confianza que se remonte a un ancla de confianza del almacén de confianza.
Un certificado intermedio es un certificado que forma parte de una cadena de confianza que lleva a una ancla de confianza en el almacén de confianza. Se usa, junto con cualquier otra CA intermedia incluida en el certificado de hoja, para crear la cadena de confianza durante el proceso de validación. Crear un certificado intermedio es opcional.
Si necesitas usar un certificado autofirmado, caducado, que no esté encadenado a una raíz de confianza especificada o que no haya superado la validación, puedes añadirlo a una lista de permitidos en la configuración de confianza. También puedes crear un certificado autofirmado que se pueda añadir a una lista de permitidos.
El almacén de confianza no contiene ninguna clave privada, ya que solo se necesitan los certificados para verificar una cadena de confianza.
Recurso Backend Authentication Config
El recurso Backend Authentication Config (BackendAuthenticationConfig
),
asociado al servicio de backend del balanceador de carga, permite lo siguiente:
- TLS autenticado de backend (con la configuración de confianza y las raíces de confianza públicas)
- mTLS de backend (con el certificado de cliente)
Para habilitar TLS autenticado por backend y mTLS de backend, el recurso Backend Authentication Config apunta a los siguientes recursos:
Configuración de confianza (
trustConfig
): la configuración de confianza adjunta que se usa para validar el certificado de servidor proporcionado por el backend.Raíces de confianza públicas (
wellKnownRoots
): indica si el balanceador de carga confía en los certificados de servidor backend que han sido emitidos por ACs públicas, además de los certificados de confianza configurados. Para obtener más información, consulta Usar raíces públicas de confianza.Certificado de cliente (
clientCertificate
): el certificado de cliente que usa el balanceador de carga para expresar su identidad al backend, si la conexión al backend usa mTLS. En el caso de TLS autenticado por backend (autenticación de backend), este campo puede estar vacío. En ese caso, el balanceador de carga solo autentica el backend, pero no se autentica a sí mismo en el backend.
Servicio de backend
En el servicio backend, el atributo tlsSettings
apunta a los siguientes recursos para validar el certificado de backend.
- Configuración de autenticación de backend (
authenticationConfig
) - Nombre de host SNI (
sni
) - SANs aceptados (
subjectAltNames
)
Los campos SNI (sni
) y SAN (subjectAltNames
) del atributo tlsSettings
controlan cómo valida el balanceador de carga el certificado del backend en función de los valores SAN del certificado. Estos campos influyen en el proceso de validación independientemente de si se ha configurado la autenticación TLS de backend.
Cuando se define el campo SNI (tlsSettings.sni
), el balanceador de carga hace lo siguiente:
- Envía el nombre de host SNI al servidor backend durante el handshake TLS.
- Verifica que el certificado TLS del backend incluya un SAN que coincida con el nombre de host SNI.
De forma predeterminada, el balanceador de carga comprueba que el certificado TLS del backend incluya un SAN que coincida con el nombre de host de SNI. Sin embargo, si se configuran SANs en el servicio de backend (tlsSettings.subjectAltNames
), el balanceador de carga hará lo siguiente:
- Ignora el nombre de host SNI para la verificación SAN.
- Verifica que el certificado TLS del backend incluya una SAN que coincida con una de las SANs aceptadas (
subjectAltNames
) configuradas en el servicio del backend.
Certificado de cliente
Además de la autenticación TLS de backend (autenticación de backend), puedes configurar el servicio de backend de un balanceador de carga para que use mTLS, de forma que el balanceador de carga pueda demostrar su identidad al backend. Esta autenticación usa un certificado de cliente (balanceador de carga) que el balanceador de carga presenta al backend.
Para configurar mTLS de backend, debes hacer lo siguiente:
- Crea un recurso de certificado de cliente que contenga el certificado de cliente (balanceador de carga) y su clave privada.
- Adjunta el certificado de cliente al recurso Backend Authentication Config.
La autenticación mTLS de backend también es compatible con las identidades de carga de trabajo gestionadas de Compute Engine cuando configuras certificados gestionados a través de Certificate Manager. No se admiten los certificados gestionados de PKI pública y todos los certificados de cliente deben tener un client-auth
ámbito y cumplir los requisitos de los certificados.
Si el backend solicita un certificado de cliente, debe configurarse para aceptar el certificado de cliente. Si el backend rechaza la conexión del balanceador de carga, este devuelve un código de estado HTTP 502
para las solicitudes que esté proxyizando y registra un estado genérico en Cloud Logging.
Configurar TLS autenticado de backend y mTLS de backend en el balanceador de carga
Puedes configurar TLS autenticado de backend y mTLS de backend en el balanceador de carga mediante una PKI privada o raíces de confianza públicas.
Usar una PKI privada
A continuación, se muestra un resumen de los pasos clave que debe seguir para configurar TLS autenticado de backend y mTLS de backend en su balanceador de carga mediante certificados emitidos por su infraestructura de clave pública privada. La infraestructura de clave pública privada tiene la ventaja de estar totalmente bajo tu control y aislada de los sistemas de infraestructura de clave pública de Internet.
Crea un recurso de configuración de confianza que incluya el ancla de confianza (certificado raíz) y los certificados intermedios que actúan como raíces de confianza.
Para configurar mTLS de backend, crea un certificado de cliente que contenga el certificado de cliente (balanceador de carga) y su clave privada.
Crea un recurso Backend Authentication Config que haga referencia al recurso TrustConfig. Si quieres configurar la autenticación mutua de TLS (mTLS) de backend, el recurso Backend Authentication Config hace referencia tanto a la configuración de confianza como al certificado de cliente.
Asocia el recurso Backend Authentication Config al servicio de backend del balanceador de carga.
Para obtener más información sobre esta configuración, consulta las siguientes guías:
Usar raíces de confianza públicas
Además de usar certificados emitidos por tu infraestructura de clave pública privada para habilitar TLS autenticado en el backend, también puedes usar raíces públicas de confianza para validar el certificado de backend.
Para usar raíces de confianza públicas, no es necesario crear una configuración de confianza y asociarla al recurso Backend Authentication Config. En su lugar, debe asignar el valor PUBLIC_ROOTS
al campo wellKnownRoots
del recurso Backend Authentication Config. Dicho esto, también puedes crear un archivo trustconfig que incluya explícitamente las raíces de tus certificados emitidos públicamente, además de los certificados de confianza de la configuración de confianza.
El ajuste PUBLIC_ROOTS
usa un conjunto de ACs raíz, similar al conjunto de ACs raíz de confianza de los navegadores, que gestiona Google y que puede cambiar con el tiempo. Esto supone un riesgo de que tus certificados de backend dejen de ser válidos cuando cambien estas raíces. Si necesitas validar certificados emitidos públicamente, te recomendamos que elijas una AC fiable y consolidada que utilice la firma cruzada intermedia para emitir tus certificados de backend. De esta forma, se reduce el riesgo de que caduque o se revoque un certificado raíz.
Pasos para validar el certificado del servidor
Al validar el certificado de servidor durante la autenticación TLS autenticada por backend o la autenticación de backend, el balanceador de carga hace lo siguiente:
Verifica que el servidor tenga la clave privada del certificado.
El servidor demuestra que tiene la clave privada asociada al certificado que presenta al balanceador de carga firmando un fragmento de información con su clave privada y enviándolo al balanceador de carga como parte del mensaje
CertificateVerify
. A continuación, el balanceador de carga verifica esta firma mediante la clave pública del certificado del servidor. Si la verificación de la firma falla, significa que el servidor backend no tiene la clave privada correspondiente al certificado. En estos casos, el balanceador de carga finaliza el handshake de TLS sin registrar ningún error.Verifica la cadena de confianza.
Si la configuración de confianza incluye al menos una ancla de confianza o tiene el atributo
wellKnownRoots
definido comoPUBLIC_ROOTS
, el balanceador de carga intenta verificar una cadena de confianza entre el certificado de servidor y la ancla de confianza configurada. Las comprobaciones de verificación incluyen lo siguiente:- El certificado de servidor del backend, los certificados intermedios (si se proporcionan) y el certificado raíz configurado cumplen los requisitos de los certificados.
- En todos los certificados de la cadena de confianza, el campo de asunto del certificado principal coincide con el campo de emisor del certificado secundario. Esta verificación ayuda a asegurar que la identidad (sujeto) del certificado principal sea la misma que la identidad que aparece como emisor en el certificado secundario.
- En todos los certificados de la cadena de confianza, el identificador de clave de la entidad receptora (SKID) del certificado principal coincide con el identificador de clave de la autoridad (AKID) del certificado secundario. Esta coincidencia confirma que: El certificado secundario se ha emitido por la autoridad raíz correcta. Se puede confiar en él porque se hace referencia a la clave pública de la raíz en el AKID para verificar la validez del certificado.
Establece una conexión con el backend.
Si la validación del certificado se realiza correctamente, el balanceador de carga continúa con la conexión al backend.
Sin embargo, si la validación del certificado falla, el balanceador de carga finaliza la conexión con el backend, envía un código de estado HTTP
502
al cliente y registra el motivo de la finalización en Cloud Logging. Si se produce un error de validación de un certificado, las solicitudes entrantes posteriores harán que el balanceador de carga reinicie la conexión de backend.La conexión backend también puede fallar si el servidor backend rechaza la conexión. Con mTLS de backend, esto puede ocurrir porque el certificado de cliente no es válido. Cuando falla la conexión con el backend, el balanceador de carga responde a las solicitudes proxy con un código de estado HTTP
502
y registra un motivo de error genérico en Cloud Logging.
Gestión de errores y registro
Los balanceadores de carga de aplicaciones ofrecen funciones de registro detalladas que te permiten monitorizar la validación de los certificados de servidor, identificar posibles problemas y solucionar problemas de conexión. En esta sección se describen los distintos tipos de errores que pueden producirse durante la validación de mTLS y cómo se registran.
Si falla la validación del certificado del servidor, se terminará la conexión y los errores se registrarán en Cloud Logging. Estos errores se describen en la siguiente tabla.
Estado del certificado del servidor | Error registrado |
---|---|
La cadena de certificados del servidor es demasiado larga (más de 10 certificados intermedios incluidos en el certificado del servidor). |
server_cert_chain_exceeded_limit
|
Un servidor o un certificado intermedio tiene un tamaño de clave RSA no válido. No se realiza ninguna validación. Las claves RSA pueden tener entre 2048 y 4096 bits. |
server_cert_invalid_rsa_key_size
|
Un servidor o un certificado intermedio está usando una curva elíptica no admitida. . No se realiza ninguna validación. Las curvas válidas son P-256 y P-384. |
server_cert_unsupported_elliptic_curve_key
|
Un servidor o un certificado intermedio usa un algoritmo que no es RSA ni ECDSA. . No se realiza ninguna validación. |
server_cert_unsupported_key_algorithm
|
La PKI que se va a usar para la validación tiene más de diez certificados intermedios que comparten el mismo asunto y la misma información de clave pública del asunto. No se realiza ninguna validación. |
server_cert_pki_too_large
|
Un certificado intermedio proporcionado para la validación tenía más de 10 restricciones de nombres. |
|
El certificado del servidor tiene un campo de extensión |
|
Se ha superado el tiempo límite al intentar validar la cadena de certificados. |
server_cert_validation_timed_out
|
Se ha alcanzado el límite de profundidad o iteración al intentar validar la cadena de certificados. La profundidad máxima de una cadena de certificados es de diez, incluidos los certificados raíz y de servidor. El número máximo de iteraciones es 100 (certificados examinados para validar la cadena de certificados del servidor). |
server_cert_validation_search_limit_exceeded
|
Has configurado mTLS sin configurar un recurso |
server_cert_validation_not_performed
|
El servidor no ha proporcionado el certificado solicitado durante la negociación. |
server_cert_not_provided
|
No se ha podido verificar el certificado del servidor con el recurso |
ssl_certificate_verification_failed
|
El servicio no puede realizar la validación de la cadena de certificados. |
server_cert_validation_unavailable
|
Error interno al validar la cadena de certificados. |
server_cert_validation_internal_error
|
No se ha encontrado ningún |
server_cert_trust_config_not_found
|
La carga útil del certificado de servidor (incluidos los certificados intermedios) es demasiado grande (más de 16 KB). |
server_cert_exceeded_size_limit
|
Limitaciones
TLS autenticado de backend y mTLS de backend solo se pueden configurar para balanceadores de carga de aplicaciones externos globales. Los balanceadores de carga de aplicaciones clásicos no admiten TLS autenticado por backend ni mTLS de backend.
No se admiten TLS autenticado por backend ni mTLS de backend para los siguientes tipos de backend:
Backends de NEGs de Internet globales
Backends de App Engine
Para habilitar mTLS de backend, también debes configurar TLS autenticado de backend.
Si quieres habilitar mTLS de backend, debes crear el certificado de cliente antes de configurar el recurso Backend Authentication Config.
Las comprobaciones de estado que usan los backends no implementan la autenticación TLS ni las funciones de mTLS. Debes configurar los backends con endpoints de comprobación del estado que puedan responder a solicitudes HTTP o HTTPS.
El balanceador de carga no transfiere el nombre de host SNI del cliente desde la conexión TLS de frontend al conectarse a un backend. Sin embargo, los back-ends pueden acceder al nombre de host SNI del cliente mediante un encabezado de solicitud personalizado.
En el caso de mTLS de backend, las claves de certificado de cliente están restringidas a lo siguiente:
- Las claves RSA pueden tener entre 2048 y 4096 bits.
- Las claves ECDSA pueden usar las curvas P-256 o P-384.
TLS autenticado por backend no admite comprobaciones de revocación de certificados.
Cuotas y límites
Un solo almacén de confianza puede contener hasta 200 anclas de confianza y certificados intermedios combinados, con un límite independiente de 100 para los certificados intermedios. No pueden compartir la misma información de asunto y de clave pública de asunto más de tres certificados intermedios.
La profundidad máxima de una cadena de certificados es de 10 certificados, incluidos los certificados raíz y hoja. El número máximo de certificados intermedios que se pueden evaluar al intentar crear la cadena de confianza es 100.
TLS autenticado por backend limita la cadena de certificados recibida del backend a un máximo de 16 KB y 10 certificados.
Los certificados raíz que se usan para la validación no pueden contener más de 10 restricciones de nombre.
El número máximo de nombres alternativos de asunto permitidos en el campo
tlsSettings.subjectAltNames[]
es 5.