¿Por qué aparece un error de negociación SSL/TLS del cliente cuando intento conectarme a mi equilibrador de carga?

6 minutos de lectura
0

Quiero solucionar un error de negociación SSL/TLS que se produce cuando me conecto a mi Elastic Load Balancer (ELB).

Descripción corta

Este error se produce cuando el cliente no puede negociar una conexión segura con el equilibrador de carga. Por lo general, el problema se debe a versiones de protocolo o cifrados no compatibles.

Para establecer una conexión TLS, confirma que tu cliente admite al menos un cifrado y un protocolo definidos en la política de seguridad del equilibrador de carga.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Identificación de la política de seguridad del equilibrador de carga

Para identificar la política de seguridad de tu equilibrador de carga, sigue estos pasos:

  1. Abre la consola de Amazon Elastic Compute Cloud (Amazon EC2).
  2. En el panel de navegación, en Equilibrio de carga, selecciona Equilibradores de carga.
  3. Selecciona el equilibrador de carga y, a continuación, elige Agentes de escucha.
  4. Visualiza la política de seguridad.
    En el caso de los equilibradores de carga de aplicación y de los equilibradores de carga de red, busca la política de seguridad en la columna Política de seguridad.
    En el caso de los equilibradores de carga clásicos, selecciona Cambiar en la columna Cifrado para ver la política de seguridad.

Para usar la AWS CLI, ejecuta uno de los siguientes comandos:

  • En el caso de los equilibradores de carga de aplicación y los equilibradores de carga de red, ejecuta el comando describe-listeners.
  • En el caso de los equilibradores de carga clásicos, ejecuta el comando describe-load-balancers.

Determinar los protocolos y cifrados compatibles

Los equilibradores de carga clásicos admiten políticas de seguridad personalizadas. Sin embargo, ni los equilibradores de carga de aplicación ni los equilibradores de carga de red admiten políticas de seguridad personalizadas.

Para obtener más información acerca de las políticas de seguridad, consulta la siguiente documentación:

(Opcional) Prueba de la política de seguridad del equilibrador de carga

Prueba los protocolos y los cifrados compatibles con la política de seguridad del equilibrador de carga. Utiliza una herramienta de la línea de comandos de código abierto, como sslscan o openssl.

Para obtener más información, consulta sslscan en el sitio web de GitHub.

Uso del comando sslscan

Instala y ejecuta el comando sslscan en una instancia de EC2 de Amazon Linux o desde tu sistema local. Asegúrate de que el equilibrador de carga acepte conexiones TLS desde tu dirección IP de origen.

Para usar sslscan en una instancia de EC2 de Amazon Linux, sigue estos pasos:

  1. Activa el repositorio Extra Packages for Enterprise Linux (EPEL).

  2. Ejecuta el siguiente comando:

    sudo yum install sslscan
  3. Para analizar el equilibrador de carga en busca de los cifrados compatibles, ejecuta el siguiente comando. Sustituye ejemplo.com por tu nombre de dominio:

    [ec2-user@ ~]$ sslscan --show-ciphers example.com

    Nota: Amazon Linux 2023 (AL2023) no es compatible con EPEL.

Uso del comando openssl

Para probar la política de seguridad del equilibrador de carga, también puedes usar el comando openssl. Ejecuta el comando openssl en una instancia de EC2 de Amazon Linux o desde tu sistema local.

Para enumerar los cifrados compatibles para una versión de SSL/TLS específica, ejecuta el siguiente comando:

*$* openssl ciphers -v

El siguiente comando muestra los cifrados compatibles con la versión1.2 de TLS:

*$* openssl ciphers -V | grep "TLSv1.2"

Ejecuta el comando s_client para probar los conjuntos de cifrado y las versiones de TLS. Para conocer la solidez de un conjunto de cifrado específico, utiliza un repositorio de sitios web de terceros, como TLS Ciphersuite Search. Por ejemplo, si has ejecutado el siguiente comando, el resultado mostrará los cifrados de www.ejemplo.com:

openssl s_client -connect example.com:443

El conjunto TLS_PSK_WITH_AES_128_CBC_SHA es débil. Si usas el conjunto para un servidor, se mostrará el siguiente error:

openssl s_client -connect example.com:443 -cipher PSK-AES128-CBC-SHA -quiet
140062732593056:error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available:s23_clnt.c:508:

El conjunto ECDHE-RSA-AES128-GCM-SHA256 es fuerte. Si usas el conjunto para el servidor, se mostrará un mensaje de éxito similar al siguiente:

openssl s_client -connect example.com:443 -cipher ECDHE-RSA-AES128-GCM-SHA256
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 73B49649716645B90D13E29656AEFEBF289A4956301AD9BC65D4832794E282CD
Session-ID-ctx:
Master-Key: C738D1E7160421281C4CAFEA49941895430168A4028B5D5F6CB6739B58A15235F640A5D740D368A4436CCAFD062B3338
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1647375807
Timeout : 300 (sec)
Verify return code: 0 (ok)

Para especificar la versión del protocolo TLS utilizada en la conexión, ejecuta el comando openssl. En el siguiente ejemplo se muestra una prueba que verifica si el servidor admite TLS 1.1:

openssl s_client -connect example.com:443 -tls1_1 -quiet
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global CA G2
verify return:1
depth=0 CN = *.peg.a2z.com
verify return:1

(Opcional) Comprobación de los registros de conexión del equilibrador de carga de aplicación y los registros de acceso del equilibrador de carga de red

Si tu cliente conecta agentes de escucha HTTPS para tu equilibrador de carga de aplicación, usa los registros de conexión para comprobar el protocolo y el cifrado. El protocolo y el cifrado utilizados para la conexión se encuentran en los campos tls_protocol y tls_cipher. Si la negociación de TLS ha fallado, el campo tls_verify_status se establece en Failed:$error_code y los campos tls_protocol y tls_cipher se establecen en «-».

Si tu cliente conecta los agentes de escucha de TLS para tu equilibrador de carga de red, usa los registros de acceso para comprobar el protocolo y el cifrado. El protocolo y el cifrado utilizados para la conexión se encuentran en los campos tls_protocol_version y tls_cipher. Si la negociación de TLS ha fallado, no se graba ningún registro de acceso.

Para obtener más información, consulta Registros de conexión del equilibrador de carga de aplicación y Registros de acceso del equilibrador de carga de red.

Actualización de la política de seguridad del equilibrador de carga

Para usar protocolos o cifrados compatibles para aumentar la seguridad, actualiza la política de seguridad del equilibrador de carga. Para obtener más información sobre cómo actualizar las políticas de seguridad, consulta la siguiente documentación: