Saltar al contenido

¿Cómo puedo identificar y solucionar los problemas de conexión de los clientes cuando uso mTLS con un equilibrador de carga de aplicación?

10 minutos de lectura
0

Quiero resolver los problemas de conexión con los clientes que surgen cuando uso la seguridad mutua de la capa de transporte (mTLS) con un equilibrador de carga de aplicación.

Descripción corta

Para investigar los problemas de conexión de los clientes, debes activar los registros de conexión de tu equilibrador de carga de aplicación. Utiliza los registros de conexión para analizar los patrones de solicitud y solucionar problemas.

Para obtener más información sobre la información que proporcionan los registros de conexión, consulta Supervisión de los equilibradores de carga de aplicación.

Resolución

Los registros de conexión del equilibrador de carga de aplicación identifican los errores que se produjeron cuando el cliente intentó conectarse al equilibrador de carga de aplicación.
Nota: Para obtener información sobre las formas de procesar los errores, consulta Procesamiento de archivos de registros de conexión.

Filtrar los registros de conexión para ver errores específicos

Filtra los registros de conexión por la dirección IP del cliente para detectar errores.

  1. Ejecuta el siguiente comando para buscar solicitudes fallidas:

    zcat *.log.gz | awk '($2 == "a.a.a.a" && $11 ~ "Failed")' | awk '{print $1, $5, $6, $8, $9, $10, $11, $12}'

    Nota: Sustituye a.a.a.a por la dirección IP del cliente que estás investigando para detectar errores.

    Resultado de ejemplo:

    2024-04-05T18:31:29.268987Z TLSv1.3 ECDHE-RSA-AES256-SHA "CN=client-expired.alb-mtls-example.com,OU=IT,O=Company LLC,L=City,ST=State,C=US" NotBefore=2024-01-02T19:17:20Z;NotAfter=2024-04-02T19:17:20Z 02 "Failed:ClientCertExpired"
    2024-04-05T19:29:35.128387Z TLSv1.3 ECDHE-RSA-AES256-SHA "CN=client-expired.alb-mtls-example.com,OU=IT,O=Company LLC,L=City,ST=State,C=US" NotBefore=2024-01-02T19:17:20Z;NotAfter=2024-04-02T19:17:20Z 02 "Failed:ClientCertExpired"
    2024-04-05T20:16:44.387952Z TLSv1.3 ECDHE-RSA-AES256-SHA "CN=client-expired.alb-mtls-example.com,OU=IT,O=Company LLC,L=City,ST=State,C=US" NotBefore=2024-01-02T19:17:20Z;NotAfter=2024-04-02T19:17:20Z 02 "Failed:ClientCertExpired"
  2. Obtén el código de error del campo tls_verify_status.

  3. Consulta los códigos de motivo del erro para identificar el error.

  4. Utiliza las siguientes secciones para tratar el error específico.

Error: "ClientCertCrlHit"

Este error se produce cuando el certificado del cliente existe en la lista de revocación de certificados (CRL) que utiliza el agente de escucha de mTLS.

  1. Revisa la entrada del registro de conexiones que muestra el campo leaf_client_cert_subject.
  2. Descarga el archivo CRL del bucket de Amazon Simple Storage Service (Amazon S3). El almacén de confianza de Amazon Elastic Compute Cloud (Amazon EC2) hace referencia al archivo CRL.
  3. Revisa la CRL del certificado de cliente que se identificó en la entrada de registro.
  4. Renueva el certificado de cliente con el paquete de CA utilizado por el almacén de confianza de EC2. Vuelve a intentar la conexión con el nuevo certificado no revocado.

Error: "ClientCertCrlProcessingError"

Este error se produce cuando la lista de revocaciones de certificados (CRL) sufre un error de procesamiento.

Para solucionar este error, sigue estos pasos:

  1. Documenta la marca de tiempo asociada al error en los registros de conexión.
  2. Confirma que el certificado de cliente cumple con los requisitos definidos.
  3. Asegúrate de que la CRL configurada no supere las cuotas definidas.

Si sigue apareciendo el error, ponte en contacto con AWS Support para revisarlo más a fondo. Proporciona la siguiente información al ingeniero de AWS Support:

  • Resultado del siguiente comando curl:

     curl -vvv -X HTTP_action --cert client-cert.crt --key client_key.pem https://alb.fqdn.com -A credstest

    Nota: Sustituye HTTP_action por tu acción HTTP, client-cert.crt por el nombre de tu archivo de certificado y client_key.pem por el nombre de tu archivo de claves.

  • Certificado de cliente (no proporciones el archivo de claves)

  • Registros de conexión del periodo de tiempo en el que se produjo el problema

Error: "ClientCertExpired"

Este error se produce cuando el certificado de cliente ha vencido.

Para solucionar este error, sigue estos pasos:

  1. Comprueba el periodo de validez del certificado. Puedes encontrar este valor en el campo leaf_client_cert_validity del registro de conexiones.

  2. Ejecuta el siguiente comando en el archivo de certificado:

    openssl x509 -in $i --text | grep -A 2 "Validity"
  3. Comprueba la fecha Antes de proporcionada en el paso 2 con el campo de marca de tiempo del registro de conexiones.
    Nota: Asegúrate de que el certificado de cliente se utilice únicamente antes de la fecha Antes de.

  4. Para resolver este error, utiliza el paquete de certificado de CA al que hace referencia el almacén de confianza de EC2 para volver a emitir el certificado de cliente.

Error: "ClientCertInvalid"

Este error se produce porque el certificado de cliente no es válido.

Para solucionar este error, sigue estos pasos:

  1. Valida que el certificado de cliente cumpla con los requisitos para que pueda usarse con mTLS y el equilibrador de carga de aplicación.
  2. Vuelve a emitir el certificado.

Error: "ClientCertMaxChainDepthExceeded"

Este error se produce porque la cantidad de certificados de cliente supera la profundidad máxima de la cadena.

Para solucionar este error, sigue estos pasos:

  1. Confirma la cantidad de certificados del certificado de cliente que se presenta al equilibrador de carga de aplicación.

  2. Para examinar la profundidad de la cadena de certificados, utiliza cualquiera de las siguientes opciones:

    Windows: Elige el certificado y selecciona Ruta del certificado. A continuación, cuenta los certificados.
    Alternativa:
    Ejecuta el siguiente comando en Microsoft PowerShell y cuenta los certificados:

    certutil -dump client-cert.crt

    Nota: Sustituye client-cert.crt por el nombre de tu archivo de certificado.

    Linux o Unix: Para contar los certificados, ejecuta el siguiente comando:

    openssl crl2pkcs7 -nocrl -certfile client-cert.crt | openssl pkcs7 -print_certs -noout | grep "subject" | wc -l

    Nota: Sustituye client-cert.crt por el nombre de tu archivo de certificado. 

  3. Reduce la cantidad de certificados presentes en la cadena de certificados del cliente. Para obtener más información sobre la profundidad máxima de la cadena de certificados admitida, consulta Cuotas de los equilibradores de carga de aplicaciones.

Error: "ClientCertMaxSizeExceeded"

Este error se produce porque se supera el tamaño máximo del certificado de cliente.

Para solucionar este error, sigue estos pasos:

  1. Verifica el tamaño del certificado de cliente:
    Windows Selecciona el archivo. A continuación, selecciona propiedades y ve el tamaño del archivo.
    Linux Ejecuta el archivo du -h.
    Nota: Sustituye file por el nombre de tu archivo.
    **Macintosh ** Selecciona el elemento en el Finder y, a continuación, pulsa Command-I.
  2. Reduce el tamaño del archivo de certificado de cliente presentado al equilibrador de carga de aplicación. Para obtener más información sobre el tamaño máximo de certificado admitido, consulta Cuotas de los equilibradores de carga de aplicaciones.

Error: "ClientCertNotYetValid"

Este error se produce porque el certificado de cliente aún no es válido.

Para solucionar este error, sigue estos pasos:

  1. Comprueba el periodo de validez del certificado. Puedes encontrar este valor en el campo leaf_client_cert_validity del registro de conexiones.

  2. Ejecuta el siguiente comando en el archivo de certificado:

    openssl x509 -in $i --text | grep -A 2 "Validity"
  3. Compara la fecha Después de proporcionada en el paso 2 con el campo de marca de tiempo del registro de conexiones.
    Nota: Asegúrate de que el certificado de cliente solo se utilice después de la fecha Después de.

  4. Para resolver este error, utiliza el paquete de certificado de CA al que hace referencia el almacén de confianza de EC2 para volver a emitir el certificado de cliente.

Error: "ClientCertPurposeInvalid"

Este error se produce porque en el certificado de cliente falta el uso extendido de claves (EKU) de la «Autenticación de cliente web TLS». 

Para solucionar este error, sigue estos pasos:

  1. Emite un nuevo certificado de cliente con el EKU de clientAuth e inténtalo de nuevo.

  2. Para validar, ejecuta el siguiente comando:

    openssl x509 -in client-cert.crt --text | grep -A 1 "X509v3 Extended Key Usage:"

    Nota: Sustituye client-cert.crt por el nombre de tu archivo de certificado.

  3. Comprueba la «Autenticación de cliente web TLS» en la lista.

Error: "ClientCertRejected"

Este error se produce porque la validación personalizada del servidor rechaza el certificado del cliente.

Para solucionar este error, sigue estos pasos:

  1. Valida si el agente de escucha del equilibrador de carga de aplicación usa mTLS en los modos de paso a través o verificación.
    En el modo de paso a través, el equilibrador de carga usa encabezados HTTP para enviar el certificado del cliente y la cadena al destino para su verificación. Aparece este error cuando el destino rechaza el certificado del cliente.
  2. Revisa los registros de la aplicación en el destino para determinar la causa del error.
  3. Como práctica recomendada, utiliza el modo de verificación en lugar del modo de paso a través en el agente de escucha de mTLS.

Error: "ClientCertTypeUnsupported"

Este error se produce porque el equilibrador de carga de aplicación no admite al menos uno de los certificados de la cadena proporcionados por el cliente. El certificado utiliza una versión del certificado X509, un tamaño de clave, un algoritmo de clave o un algoritmo de firma no compatibles.

Para solucionar este error, sigue estos pasos:

  1. Ejecuta el siguiente comando en la cadena de certificados del cliente:

    openssl x509 -in client-cert.crt —text

    Nota: Sustituye client-cert.crt por el nombre de tu archivo de certificado.

  2. Comprueba que todos los certificados de la cadena cumplen con los requisitos para los certificados.

Error: "ClientCertUntrusted"

Este error se produce porque el certificado de cliente no es de confianza.

Para solucionar este error, sigue estos pasos:

  1. Comprueba que el nombre del certificado que aparece en el campo leaf_client_cert_subject haya sido emitido por la autoridad de certificación (CA) presente en el almacén de confianza de EC2 configurado.
    Nota: Si el emisor del certificado de cliente no está presente en el paquete de certificados de CA utilizado por el almacén de confianza de EC2, los mTLS no funcionarán.

  2. Ejecuta el siguiente comando en el certificado de cliente:

    openssl crl2pkcs7 -nocrl -certfile client-cert.crt | openssl pkcs7 -print_certs -noout | grep -e 'issuer' -e 'subject' | sed -e 's/subject._CN = /Subject: /; s/issuer._CN = /Issuer: /'"

    Nota: Sustituye client-cert.crt por el nombre de tu archivo de certificado.

  3. Para recuperar los sujetos presentes en el paquete, ejecuta el siguiente comando en el paquete de certificados de CA utilizado por el almacén de confianza de EC2:

    openssl crl2pkcs7 -nocrl -certfile client-cert.crt | openssl pkcs7 -print_certs -noout | grep -e 'subject' | sed -e 's/subject.*CN = /Subject: /'

    Nota: Sustituye client-cert.crt por el nombre del archivo del paquete de certificados.

Error: "UnmappedConnectionError"

Este error se produce cuando no se puede asignar la conexión en la versión ejecutable.

Ponte en contacto con AWS Support para una revisión más profunda. Proporciona la siguiente información al ingeniero de AWS Support:

  • Resultado del siguiente comando curl:

     curl -vvv -X HTTP_action --cert client-cert.crt --key client_key.pem https://alb.fqdn.com -A credstest

    Nota: Sustituye HTTP_action por el nombre de tu acción HTTP, client-cert.crt por el nombre de tu archivo de certificado y client_key.pem por el nombre de tu archivo de claves.

  • Certificado de cliente (no proporciones el archivo de claves)

  • Registros de conexión del periodo de tiempo en el que se produjo el problema

Información relacionada

¿Cómo puedo utilizar Amazon Athena para consultar los registros de conexión de mi equilibrador de carga de aplicación?

Introducing mTLS for Application Load Balancer (Introducción a mTLS para el equilibrador de carga de aplicación)

How do I investigate issues related to the CA bundle for mTLS listeners on the Application Load Balancer? (¿Cómo puedo investigar los problemas relacionados con el paquete de CA para los agentes de escucha de mTLS en el equilibrador de carga de aplicación?)