Partilhar via


Configurar o TLS 1.3

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Este artigo explica como:

  1. Configurar uma instância do SQL Server 2022 (16.x) para usar o protocolo TLS 1.3 e TLS 1.2
  2. Verificar se os protocolos estão operacionais
  3. Desativar protocolos mais antigos e inseguros, incluindo TLS 1.0 e 1.1

Requisitos

O suporte a TLS 1.3 no SQL Server 2022 (16.x) exige:

  • Windows Server 2022
  • SQL Server 2022 (16.x) com atualização cumulativa 1 ou posterior
  • A instância do SQL Server usa TCP/IP como um protocolo de rede
  • Um certificado de servidor X.509 válido instalado junto com sua chave privada

Importante

Este documento pressupõe que seus requisitos incluem TLS 1.3 e TLS 1.2 em curto prazo e apenas TLS 1.3 em longo prazo.

SQL Server e TLS

O SQL Server não executa operações TLS em si, em vez disso, esse trabalho é executado pelo Windows usando o Schannel SSP. O Schannel é um Provedor de Suporte de Segurança (SSP) que contém e expõe a implementação da Microsoft de protocolos de segurança padrão da Internet, como TLS. Schannel é para o Windows o que o OpenSSL é para o Linux.

A configuração do TLS para SQL Server exige a configuração do TLS para Windows.

Com o SQL Server 2022 (16.x) no Windows Server 2022, o SQL Server oferece suporte a TLS 1.0, 1.1, 1.2 e 1.3. Para verificar isso, use o código .NET disponível no GitHub em TlsTest. A saída da ferramenta é semelhante a:

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

Configurar o Windows para usar apenas TLS 1.2 e TLS 1.3

O Windows tem um conjunto de chaves do Registro emHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL que controla as versões do protocolo TLS, bem como conjuntos de criptografia. Para esse cenário, somente as versões de protocolo que afetam os servidores são importantes, porque a instância do SQL Server atua como um servidor.

O seguinte script do PowerShell atualiza o Registro para habilitar ou desabilitar o TLS 1.0 e o TLS 1.1 quando usados por servidores:

Aviso

Antes de continuar, faça backup do registro. Isso permitirá que você restaure o registro no futuro, se necessário.

# Learn more at https://learn.microsoft.com/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."
}

Esse código está disponível no GitHub em set-reset-tls.ps1.

Depois de executar esse script, reinicie o processo do SQL Server para que as novas configurações do TLS entrem em vigor. Se você executar o código mencionado no início do artigo, ele retornará:

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 o SSL 2.0, o SSL 3.0, o TLS 1.0 e o TLS 1.1 não conseguem se conectar, mas tanto o TLS 1.2 quanto o TLS 1.3 são bem-sucedidos.

Após a atualização do Registro, o Windows e essa instância do SQL Server só permitem conexões TLS 1.2 e TLS 1.3. Posteriormente, quando mais clientes oferecerem suporte ao TLS 1.3, você também poderá desabilitar o TLS 1.2.

Definir instância do SQL Server para forçar criptografia estrita

A etapa final é definir a instância para utilizar Force Strict Encryption. Com Force Strict Encryption, a instância SQL usa uma versão com suporte do protocolo TDS (TDS 8.0 ou posterior).

Use o SQL Server Configuration Manager para definir essa configuração.

  1. Expanda a Configuração de Rede do SQL Server

  2. Clique com o botão direito do mouse em Protocolos para<instance name> e selecione Propriedades

    O nome de instância padrão é MSSQLSERVER.

  3. Na guia Sinalizadores, defina Forçar criptografia estrita como Sim

    Screenshot of the UI control for SQL Server Configuration Manager, configure protocols dialog.

Verificar a segurança

Esta seção demonstra como usar o Wireshark, OpenSSL e Nmap para verificar a criptografia.

Wireshark

Você pode usar sniffers de rede para determinar a versão do protocolo TLS e o conjunto de codificação combinado. Você pode achar alguns dados confusos. Se você olhar para a captura de tela abaixo do Wireshark, ela mostra que o pacote é uma Camada de Registro TLS v1.3, mas a versão do protocolo é TLS 1.2 e a versão do Protocolo de aperto de mãos também é TLS 1.2. Tudo isso faz parte da especificação TLS 1.2 e é correto e esperado. A versão do protocolo combinada está na seção Extensões e, como você pode ver, supported_versions é o TLS 1.3.

Screenshot of the TLS extension section.

OpenSSL

Você também pode usar o openssl para descobrir as informações TLS combinadas.

Use o seguinte comando:

openssl s_client 127.0.0.1:1433

O comando retorna 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

A versão atual do Nmap, versão 7.94, parece não detectar TLS 1.3 ao usar:

nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1.