Configuración de TLS 1.3
Se aplica a: SQL Server 2022 (16.x) y versiones posteriores
En este artículo se explica lo siguiente:
- Configuración de una instancia de SQL Server 2022 (16.x) para usar la seguridad de la capa de transporte (TLS) 1.3 y TLS 1.2
- Compruebe que los protocolos están operativos
- Desactive protocolos antiguos y no seguros, incluyendo TLS 1.0 y 1.1
Requisitos
La compatibilidad de TLS 1.3 en SQL Server 2022 (16.x) requiere:
- Windows Server 2022
- SQL Server 2022 (16.x) con actualización acumulativa 1 y posterior
- La instancia de SQL Server usa TCP/IP como protocolo de red
- Un certificado de servidor X.509 válido instalado junto con su clave privada
Importante
En este documento se supone que los requisitos incluyen TLS 1.3 y TLS 1.2 a corto plazo, y solo TLS 1.3 a largo plazo.
SQL Server y TLS
SQL Server no realiza operaciones TLS por sí mismo, sino que Windows realiza este trabajo mediante el SSP Schannel. Schannel es un proveedor de soporte técnico de seguridad (SSP) que contiene y expone la implementación de Microsoft de protocolos de seguridad estándar de Internet, como TLS. Schannel es para Windows lo que OpenSSL es para Linux.
La configuración de TLS para SQL Server requiere la configuración de TLS para Windows.
Con SQL Server 2022 (16.x) en Windows Server 2022, SQL Server admite TLS 1.0, 1.1, 1.2 y 1.3. Para comprobarlo, use el código de .NET disponible en GitHub en TlsTest. La salida de esta herramienta tiene un aspecto similar al siguiente:
Trying Ssl2
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Ssl3
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Tls
Tls using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Trying Tls11
Tls11 using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Trying Tls12
Tls12 using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Trying Tls13
Tls13 using TLS_AES_256_GCM_SHA384
Configuración de Windows para usar solo TLS 1.2 y TLS 1.3
Windows tiene un conjunto de claves del Registro bajo HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
que controlan las versiones del protocolo TLS, así como conjuntos de cifrado. En este escenario, solo importan las versiones del protocolo que afectan a los servidores, ya que la instancia de SQL Server actúa como servidor.
El siguiente script de PowerShell actualiza el registro para habilitar o inhabilitar TLS 1.0 y TLS 1.1 cuando lo usan los servidores:
Advertencia
Antes de continuar, realice una copia de seguridad del registro. Esto le permitirá restaurar el registro en el futuro, si es necesario.
# Learn more at https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings?tabs=diffie-hellman
Set-StrictMode -Version Latest
$base = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\'
$protocols = [ordered]@{
"SSL 2.0" = $false
"SSL 3.0" = $false
"TLS 1.0" = $false
"TLS 1.1" = $false
"TLS 1.2" = $true
"TLS 1.3" = $true
}
foreach ($version in $protocols.Keys) {
$enabledValue = $protocols[$version]
$path = $base + $version + '\Server'
New-Item $path -Force | Out-Null
New-ItemProperty -Path $path `
-Name 'Enabled' `
-Value $enabledValue `
-PropertyType 'DWord' `
-Force | Out-Null
Write-Host "$version is $enabledValue."
}
Este código está disponible en GitHub.
Una vez ejecutado este script, reinicie el proceso de SQL Server para que la nueva configuración de TLS entre en vigor. Si ahora ejecuta el código mencionado al principio del artículo, devuelve:
Trying Ssl2
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Ssl3
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Tls
Received an unexpected EOF or 0 bytes from the transport stream.
Exception:
Trying Tls11
Received an unexpected EOF or 0 bytes from the transport stream.
Exception:
Trying Tls12
Tls12 using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Trying Tls13
Tls13 using TLS_AES_256_GCM_SHA384
Observe que SSL 2.0, SSL 3.0, TLS 1.0 y TLS 1.1 no se pueden conectar, pero TLS 1.2 y TLS 1.3 sí.
Después de la actualización del Registro, Windows y esta instancia de SQL Server solo permiten conexiones TLS 1.2 y TLS 1.3. Más adelante, cuando más clientes admitan TLS 1.3, también puede inhabilitar TLS 1.2.
Establecer la instancia de SQL Server para forzar el cifrado estricto
El último paso es configurar la instancia para que use Force Strict Encryption
. Con Force Strict Encryption
, la instancia de SQL usa una versión compatible del flujo de datos tabular (TDS 8.0 o posterior).
Use Administrador de configuración de SQL Server para establecer esta configuración.
Expanda la opción Configuración de red de SQL Server
Haga clic con el botón derecho en Protocolos para
<instance name>
y seleccione PropiedadesUn nombre de instancia predeterminado es MSSQLSERVER.
En la pestaña Marcas, en cifrado Force Strict, introduzca el valor Sí.
Comprobación de la seguridad
En esta sección se muestra cómo usar Wireshark, OpenSSL y Nmap para comprobar el cifrado.
Wireshark
Puede usar analizadores de protocolos de red para determinar la versión del protocolo TLS y el conjunto de cifrado acordado. Es posible que encuentre algunos datos confusos. En la captura de pantalla siguiente de Wireshark se muestra que el paquete es una capa de registro TLS 1.3, pero la versión del protocolo es TLS 1.2 y la versión del protocolo de enlace también es TLS 1.2. Esto forma parte de la especificación TLS 1.2 y es correcta y esperada. La versión del protocolo acordado está en la sección Extensiones y, como puede ver, en supported_versions aparece TLS 1.3.
OpenSSL
También puede usar openssl para detectar la información del TLS acordado.
Use el comando siguiente:
openssl s_client 127.0.0.1:1433
El comando devuelve resultados como:
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID : 516D56D99088BCDE1 <snip> 098EDB1A
Session-ID-ctx:
Resumption PSD: B2B9CB92B59aa1 <snip> BD824CBA
PSK identity: None
Nmap
La versión actual de Nmap, versión 7.94, parece no detectar TLS 1.3 al usar:
nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1
.
Contenido relacionado
- Conexión a SQL Server mediante cifrado strict
- Seguridad de la capa de transporte y certificados digitales
- Requisitos de certificado para SQL Server
- Configuración del Motor de base de datos de SQL Server para cifrar conexiones
- Compatibilidad con TLS 1.3
- TDS 8.0
- Configuración del Registro de Seguridad de la capa de transporte (TLS)