Настройка TLS 1.3
Область применения: SQL Server 2022 (16.x) и более поздних версий
В статье описывается выполнение следующих задач:
- Настройте экземпляр SQL Server 2022 (16.x) для использования протокола безопасности транспортного уровня (TLS) 1.3 и TLS 1.2.
- Убедитесь, что протоколы работают
- Отключение старых небезопасных протоколов, включая 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, чтобы задать этот параметр.
Разверните конфигурацию сети SQL Server
Щелкните правой кнопкой мыши протоколы
<instance name>
и выберите пункт "Свойства"Имя экземпляра по умолчанию — MSSQLSERVER.
На вкладке "Флаги" установите для Принудительного строгого шифрования значение "Да"
Проверка безопасности
В этом разделе показано, как использовать Wireshark, OpenSSL и Nmap для проверки шифрования.
Wireshark
Вы можете использовать сетевые анализаторы трафика для определения версии протокола TLS и согласованного набора шифров. Некоторые данные могут быть запутанными. Если вы посмотрите на снимок экрана ниже из Wireshark, вы увидите, что пакет является записью уровня TLS версии 1.3, но версия протокола - TLS 1.2, а версия протокола рукопожатия также TLS 1.2. Это все часть спецификации TLS 1.2 и является правильной и ожидаемой. Согласованная версия протокола находится в разделе "Расширения", и, как видно, supported_versions — TLS 1.3.
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
.