Error pre-login handshake – conexión a SQL bajo SSL [SOLUCIONADO]

Errores comunes durante el establecimiento de la conexión SSL con SQL Server en Linux

Al intentar conectar aplicaciones o servicios con SQL Server bajo entornos Linux, una problemática frecuente es el enfrentamiento con errores en la etapa de pre-login, específicamente cuando se utiliza una comunicación cifrada SSL. Esta etapa de la conexión es crítica, ya que establece las bases del diálogo entre el cliente y el servidor de base de datos. Este proceso puede fallar por múltiples razones, generando interrupciones en la comunicación y, en consecuencia, un impacto negativo en el acceso a los datos.

Diagnóstico y comprensión del error de pre-login con SSL

El mensaje de error de pre-login puede manifestarse a través de diferentes alertas, pero todas apuntan a un fallo en el establecimiento de una conexión segura. La interpretación correcta del mensaje de error es el primer paso para solucionar el problema. Por ejemplo, un error frecuente se refleja en el cliente de esta manera:

Error Number: 18456
Severity: 14
State: 1
Line Number: 65536

El paso siguiente es revisar los logs del servidor SQL Server donde se detallan los problemas de conexión. En Linux, estos registros pueden encontrarse habitualmente en /var/opt/mssql/log/.

Análisis de certificados SSL y solución

Un aspecto crucial para asegurar una comunicación cifrada exitosa es la correcta implementación y configuración de los certificados SSL. Cuando uno de ellos no cumple con los requisitos necesarios, es posible encontrar un error de pre-login como este:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake.

Para verificar y corregir posibles problemas con los certificados SSL en Linux, primero se debe garantizar que el certificado esté correctamente instalado y que sea válido, así como tener la cadena de certificaciones completa en caso de certificados emitidos por una autoridad de certificación.

Configuración de OpenSSL y TLS en Linux

La configuración de OpenSSL y TLS en el servidor Linux es otro aspecto clave. Una configuración incorrecta o incompleta puede dar lugar a fallos de conexión. Es fundamental asegurarse de que las versiones de TLS soportadas por el servidor SQL y el cliente concuerden y que estén correctamente habilitadas en ambos sistemas. Puede ser útil revisar la configuración de OpenSSL con el siguiente comando:

openssl s_client -connect host:port

La respuesta del comando debería dar una visión clara de si la negociación SSL/TLS se establece correctamente o no. En caso de encontrar errores, la revisión de la configuración del protocolo o incluso su actualización podría ser necesaria.

Firewall y configuración de red

En algunas ocasiones, el firewall de Linux o ciertas reglas de red pueden impedir una correcta conexión SSL con SQL Server. Es imprescindible verificar que no existen restricciones de red que bloqueen el puerto 1433, que es el utilizado por defecto para las conexiones a SQL Server, así como cualquier otro puerto configurado para la comunicación cifrada.

Ajustes en el cliente y cadena de conexión

Cuando se utilizan bibliotecas como ADO.NET, JDBC o ODBC para gestionar la conexión desde el cliente, es importante asegurarse de que la cadena de conexión está estructurada correctamente incorporando los parámetros necesarios para establecer una conexión SSL. Por ejemplo, en el caso de una conexión con ADO.NET, la cadena podría incluir:

Server=mi_servidor;Database=mi_base_de_datos;Encrypt=true;TrustServerCertificate=false; ...

Cada lenguaje de programación o tecnología podría necesitar una sintaxis específica para garantizar una conexión segura y cifrada, por lo que es importante consultar la documentación de la biblioteca o herramienta utilizada.

Depuración y rastreo en Linux

La herramienta tcpdump puede resultar muy útil para rastrear el intercambio de paquetes entre el cliente y el servidor SQL durante el proceso de pre-login. Comprender la secuencia de comunicación y donde puede estar fallando es vital para resolver problemas específicos relacionados con la conexión SSL.

Errores específicos y su resolución en código

Algunos errores específicos como “SSL Provider, error: 0 – The wait operation timed out” pueden solucionarse ajustando tiempos de espera o parámetros de conexión en el cliente o servidor. En el ejemplo siguiente, se muestra un fragmento de código en Python que utiliza la biblioteca pyodbc para establecer una conexión segura:

import pyodbc

conexion_str = (
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=mi_servidor;"
    "DATABASE=mi_base_de_datos;"
    "UID=mi_usuario;"
    "PWD=mi_contraseña;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
)

try:
    conn = pyodbc.connect(conexion_str)
    print("Conexión establecida")
except Exception as e:
    print("Error de conexión:", e)

En este script, se establece explícitamente la necesidad de una conexión encriptada y se manifiesta la intención de no confiar ciegamente en el certificado del servidor, lo cual incrementa la seguridad.

Consideraciones finales sobre la mejora de la conexión SSL

Mantener los sistemas actualizados y seguir las mejores prácticas de seguridad es esencial para evitar problemas de pre-login en conexiones con SQL Server bajo SSL. Esto incluye mantener actualizado el servidor SQL Server, el sistema operativo Linux y los controladores ODBC o JDBC. Además, vigilar constantemente los logs del sistema y tener un mecanismo de alertas ante fallos puede mejorar significativamente el tiempo de respuesta ante incidentes.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad