Si como yo, has migrado una instancia de una versión antigua de SQL Server a una nueva, asegurándote de que la configuración TLS sea la misma en ambos casos, y a pesar de eso, tus aplicaciones no pueden conectarse al servidor, este artículo puede ahorrarte horas de búsqueda.
EL CASO: Errores de conexión TLS tras migrar a un nuevo servidor Windows con SQL
Debemos migrar una instancia SQL Server en una versión fuera de soporte o cercana a hacerlo a un nuevo servidor con SQL Server 2019 o 2022. El nuevo servidor dispone de una versión de Windows acorde a la versión instalada de SQL.
Por su parte, las aplicaciones del cliente están en alguna de estas versiones de Windows:
- Windows Server 2016 sin los parches KB 4537806 y KB 4540670 aplicados (versión 1607 o anterior).
- Windows 10, versión 1507
- Windows 8.1
- Windows 7
- Windows Server 2012 R2 o anteriores
La configuración TLS en los clientes y el servidor es idéntica y, sin embargo, tras la migración, los clientes reciben mensajes de tipo:
LA CAUSA: Errores de conexión TLS tras migrar a un nuevo servidor Windows con SQL
El “culpable”, tal y como apuntan los mensajes de error, es el protocolo TLS. Se trata de un protocolo de cifrado que permite a dos partes identificarse, autenticarse entre sí y comunicarse con confidencialidad e integridad de datos.
Durante la autenticación de cliente y servidor, hay un paso que requiere que los datos se cifren con una clave asimétrica y que se descifren con la otra clave del par. Las claves deben calcularse de la misma forma en el cliente y en el servidor, ya que si no son idénticas, la conexión no funcionará.
Las nuevas versiones Windows incluyen una versión parcheada del algoritmo de cálculo de las claves TLS (Diffie–Hellman key Exchange), que incluye en el cálculo los ceros situados a la izquierda de la MAC, lo que no se puede hacer en versiones antiguas de este sistema operativo, en las que se ignoran esos valores.
Cuando dos servidores con versiones distintas del algoritmo de cálculo, intentan comunicarse, generan claves distintas y se produce el error.
LA SOLUCIÓN DEFINITIVA: Errores de conexión TLS tras migrar a un nuevo servidor Windows con SQL
La solución definitiva es actualizar los servidores de aplicaciones a versiones Windows más modernas que calculen correctamente la clave:
- Windows Server 2016, versión 1607 y posteriores.
- Windows Server 2019 RTM y posteriores.
- Windows 10, versión 1511 y posteriores.
No obstante, cuando esto no es posible (por cualquier motivo), debemos buscar una alternativa.
UNA ALTERNATIVA ACEPTABLE: Errores e conexión TLS tras migrar a un nuevo servidor Windows con SQL
Si las versiones antiguas de Windows ignoran los ceros a la izquierda al calcular la clave TLS, hagamos que las nuevas versiones los ignoren también. Para ello es necesario deshabilitar el cifrado TLS_DHE en el nuevo servidor.
Disponemos de dos métodos:
A) Usando políticas de grupo
- Abrir gpedit.msc
- Computer Configuration -> Administrative Templates -> Network -> SSL Configuration Settings
- Deshabilitar SSL Cipher Suite Order setting
B) Usando Powershell
foreach ($CipherSuite in $(Get-TlsCipherSuite).Name)
{
if ( $CipherSuite.substring(0,7) -eq "TLS_DHE" )
{
"Disabling cipher suite: " + $CipherSuite
Disable-TlsCipherSuite -Name $CipherSuite
}
else
{
"Existing enabled cipher suite will remain enabled: " + $CipherSuite
}
}
Debido a la distribución de la cardinalidad del campo SupplierID, se observa un comportamiento dispar en función del valor del parámetro que se le pasa al procedimiento almacenado. Veámoslo:
Conclusiones
Como acabamos de comprobar, a la hora de migrar instancias a nuevos servidores, no sólo debemos tener en cuenta las peculiaridades de la instancia SQL Server, sino que la versión del sistema operativo influye de forma muy directa en cómo se accede a la misma.
El uso del protocolo TLS en comunicaciones con SQL Server es esencial para garantizar la privacidad, integridad y autenticidad de los datos transmitidos. Para evitar la posibilidad de un ataque o una vulnerabilidad, debe mantenerse actualizado en lo posible, lo que puede generar inconvenientes como los indicados en este artículo.