Saltar al contenido

Habilitar TLS 1.2 para el correo de la base de datos de SQL Server 2016

Después de consultar con expertos en este tema, programadores de deferentes ramas y profesores hemos dado con la respuesta al dilema y la dejamos plasmada en este post.

Solución:

TLS1.2 es la única versión de TLS que se considera segura ahora (marzo de 2019). Ha sido necesario un tiempo y un esfuerzo considerables para descubrir que hay 2 configuraciones adicionales esenciales que se requieren para que esto funcione y que no son bien conocidas ni bien documentadas por Microsoft o en la web en general. Lo siguiente podría ahorrarle mucho tiempo y esfuerzo..

Estas son las 2 nuevas configuraciones de registro que nos solucionaron el problema:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
 
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001

Esta es una referencia al hilo donde finalmente encontramos esta información, enterrada en la mitad del hilo: TLS 1.2 en .NET Framework 4.0

A continuación se muestra el contenido de un archivo de registro ejecutable simple que armé que hará las 2 configuraciones nuevas y las configuraciones que ya se muestran en el hilo de arriba (es decir, esto hace que todas las configuraciones de registro necesarias*):

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
 
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
 
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2]
 
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
 
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

Nota 1: SQL debe reiniciarse para que esta configuración surta efecto, pero es mejor reiniciar Windows ya que la nueva configuración afectará a .NET 4.x en general.

Nota 2: En SQL, la casilla de verificación SSL debe estar marcada en el perfil de correo para usar TLS1.2.

* Nota 3: FYI Ejecutamos la herramienta gratuita, Crypto V2, con la opción “Mejores prácticas” habilitada antes de comenzar a hacer que esto funcione. Posteriormente verificamos nuestros cambios utilizando la nueva versión 3 de Crypto.

Con suerte, esto ahorrará mucho tiempo, esfuerzo y frustración a los demás;)

Como parece que nadie puede responder esta pregunta, abrí un caso de soporte con Microsoft, y aún así, el soporte de MS tardó casi 1 semana en regresar con una respuesta mientras revisaba varios recursos internos para obtener la respuesta definitiva.

El resumen es:

El correo de la base de datos de SQL Server usa System.Net.Mail para hacer el trabajo, System.Net.Mail puede enviar correo usando TLS 1.2 pero solo cuando la versión de tiempo de ejecución de compilación es 4.6 o superior. El correo de base de datos de SQL Server 2016 está diseñado para .Net 3.5, por lo tanto, el correo de base de datos de SQL Server 2016 no es compatible con TLS 1.2 a partir de ahora.

Es extraño porque el artículo vinculado dice claramente:

Soporte para TLS v1.2 incluido en .NET Framework versión 3.5 SP1 en Windows 8.1 y Windows Server 2012 R2

lo que contradice la respuesta que recibe del soporte de MS. Editar: Encontré en esta pregunta de StackOverflow que aunque .NET 3.5 no incluía soporte para TLS 1.2 al principio, MS lo agregó más tarde:

Compatibilidad con las versiones predeterminadas del sistema TLS incluidas en .NET Framework 3.5.1 en Windows 7 SP1 y Server 2008 R2 SP1

Al leer la sección de preguntas frecuentes, creo que el problema es que te perdiste un registro key al habilitar TLS 1.2. La sección de preguntas frecuentes dice:

La configuración de registro correcta es la siguiente:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2] 
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client]
  "DisabledByDefault"=dword:00000000
  "Enabled"=dword:00000001 
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server]
  "DisabledByDefault"=dword:00000000
  "Enabled"=dword:00000001  

Esta configuración es necesaria tanto para el servidor como para el cliente.

Pero en la captura de pantalla que proporcionaste solo veo "Enabled"=dword:00000001, el "DisabledByDefault"=dword:00000000 key Está perdido.

También dice:

¿TLS 1.1 es compatible con SQL Server 2016?

Si. SQL Server 2016 y SQL Server 2017 en las versiones de Windows se envían con compatibilidad con TLS 1.0 a TLS 1.2. Debe deshabilitar TLS 1.0 y 1.1 si desea usar solo TLS 1.2 para la comunicación cliente-servidor.

que se puede interpretar como que necesidad de deshabilitar TLS 1.0 y 1.1 para usar 1.2, pero no estoy seguro de este.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *