Поделиться через


Настройка TLS 1.3

Область применения: SQL Server 2022 (16.x) и более поздних версий

В статье описывается выполнение следующих задач:

  1. Настройте экземпляр SQL Server 2022 (16.x) для использования протокола безопасности транспортного уровня (TLS) 1.3 и TLS 1.2.
  2. Убедитесь, что протоколы работают
  3. Отключение старых небезопасных протоколов, включая TLS 1.0 и 1.1

Требования

Требуется поддержка TLS 1.3 в SQL Server 2022 (16.x):

  • Windows Server 2022
  • SQL Server 2022 (16.x) с накопительным обновлением 1 или более поздним
  • Экземпляр SQL Server использует TCP/IP в качестве сетевого протокола.
  • Допустимый сертификат сервера X.509, установленный вместе с закрытым ключом

Внимание

В этом документе предполагается, что требования включают TLS 1.3 и TLS 1.2 в краткосрочной перспективе и только TLS 1.3 в долгосрочной перспективе.

SQL Server и TLS

SQL Server не выполняет сами операции TLS, а эта работа выполняется Windows с помощью Schannel SSP. Schannel — это поставщик поддержки безопасности (SSP), который содержит и раскрывает реализацию корпорацией Майкрософт стандартных протоколов безопасности Интернета, таких как TLS. Schannel — это для Windows, что OpenSSL — для Linux.

Для настройки TLS для SQL Server требуется настройка TLS для Windows.

С SQL Server 2022 (16.x) в Windows Server 2022 SQL Server поддерживает TLS 1.0, 1.1, 1.2 и 1.3. Чтобы проверить это, используйте код .NET, доступный в GitHub в TlsTest. Выходные данные средства выглядят следующим образом:

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

Настройка Windows только для использования TLS 1.2 и TLS 1.3

В Windows есть набор ключей реестра под HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL, которые управляют версиями протокола TLS, а также наборами шифров. В этом сценарии имеют значение только версии протокола, которые влияют на серверы, поскольку экземпляр SQL Server действует в качестве сервера.

Следующий скрипт PowerShell обновляет реестр, чтобы включить или отключить TLS 1.0 и TLS 1.1 при использовании серверами:

Предупреждение

Прежде чем продолжить, создайте резервную копию реестра. При необходимости вы сможете восстановить реестр.

# 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."
}

Этот код доступен в GitHub.

После запуска этого скрипта перезапустите процесс SQL Server, чтобы новые параметры TLS вступили в силу. Если вы запускаете код, упомянутый в начале статьи, он возвращает следующее:

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

Обратите внимание, что все протоколы SSL 2.0, SSL 3.0, TLS 1.0 и TLS 1.1 не смогли установить соединение, но как TLS 1.2, так и TLS 1.3 подключаются успешно.

После обновления реестра Windows и этого экземпляра SQL Server разрешают подключения TLS 1.2 и TLS 1.3. Позже, когда больше клиентов поддерживают TLS 1.3, можно также отключить TLS 1.2.

Установка экземпляра SQL Server для принудительного строгого шифрования

Последним шагом является установка экземпляра на использование Force Strict Encryption. При использовании Force Strict Encryption экземпляра SQL используется поддерживаемая версия табличного потока данных (TDS 8.0 или более поздняя версия).

Используйте диспетчер конфигурации SQL Server, чтобы задать этот параметр.

  1. Разверните конфигурацию сети SQL Server

  2. Щелкните правой кнопкой мыши протоколы<instance name>и выберите пункт "Свойства"

    Имя экземпляра по умолчанию — MSSQLSERVER.

  3. На вкладке "Флаги" установите для Принудительного строгого шифрования значение "Да"

    Снимок экрана: элемент управления пользовательского интерфейса для диспетчер конфигурации SQL Server, диалоговое окно настройки протоколов.

Проверка безопасности

В этом разделе показано, как использовать Wireshark, OpenSSL и Nmap для проверки шифрования.

Wireshark

Вы можете использовать сетевые анализаторы трафика для определения версии протокола TLS и согласованного набора шифров. Некоторые данные могут быть запутанными. Если вы посмотрите на снимок экрана ниже из Wireshark, вы увидите, что пакет является записью уровня TLS версии 1.3, но версия протокола - TLS 1.2, а версия протокола рукопожатия также TLS 1.2. Это все часть спецификации TLS 1.2 и является правильной и ожидаемой. Согласованная версия протокола находится в разделе "Расширения", и, как видно, supported_versions — TLS 1.3.

Снимок экрана: раздел расширения TLS.

OpenSSL

Вы также можете использовать opensl для обнаружения согласованных сведений TLS.

Используйте следующую команду:

openssl s_client 127.0.0.1:1433

Результаты выполнения команды выглядят так:

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

Текущая версия Nmap версии 7.94, как представляется, не обнаруживает TLS 1.3 при использовании:

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