Konfigurowanie protokołu TLS 1.3
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
W tym artykule wyjaśniono, jak:
- Skonfiguruj wystąpienie SQL Server 2022 (16.x) do używania Transport Layer Security (TLS) 1.3 i TLS 1.2
- Sprawdź, czy protokoły działają
- Wyłącz starsze, niezabezpieczone protokoły, w tym TLS 1.0 i 1.1
Wymagania
Obsługa protokołu TLS 1.3 w programie SQL Server 2022 (16.x) wymaga:
- Windows Server 2022
- SQL Server 2022 (16.x) z aktualizacją zbiorczą 1 lub nowszą
- Wystąpienie programu SQL Server używa protokołu TCP/IP jako protokołu sieciowego
- Prawidłowy certyfikat serwera X.509 zainstalowany wraz z jego kluczem prywatnym
Ważny
W tym dokumencie przyjęto założenie, że wymagania obejmują zarówno protokoły TLS 1.3, jak i TLS 1.2 w krótkim okresie oraz tylko protokół TLS 1.3 w dłuższej perspektywie.
SQL Server i TLS
Program SQL Server nie wykonuje operacji protokołu TLS, lecz są one wykonywane przez system Windows przy użyciu dostawcy Schannel SSP. Schannel jest Dostawcą Obsługi Zabezpieczeń (SSP), który zawiera i udostępnia implementację standardowych internetowych protokołów zabezpieczeń firmy Microsoft, takich jak TLS. Schannel to dla Windows co OpenSSL dla Linuxa.
Konfigurowanie protokołu TLS dla programu SQL Server wymaga skonfigurowania protokołu TLS dla systemu Windows.
W programie SQL Server 2022 (16.x) w systemie Windows Server 2022 program SQL Server obsługuje protokoły TLS 1.0, 1.1, 1.2 i 1.3. Aby to sprawdzić, użyj kodu platformy .NET dostępnego w witrynie GitHub na stronie TlsTest. Dane wyjściowe z narzędzia wyglądają następująco:
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
Konfigurowanie systemu Windows do używania tylko protokołów TLS 1.2 i TLS 1.3
System Windows ma zestaw kluczy rejestru w HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
, które kontrolują wersje protokołu TLS, a także zestawy szyfrowania. W tym scenariuszu tylko wersje protokołu, które mają wpływ na serwery, mają znaczenie, ponieważ wystąpienie programu SQL Server działa jako serwer.
Poniższy skrypt programu PowerShell aktualizuje rejestr, aby włączyć lub wyłączyć protokoły TLS 1.0 i TLS 1.1 w przypadku użycia przez serwery:
Ostrzeżenie
Przed kontynuowaniem utwórz kopię zapasową rejestru. Umożliwi to przywrócenie rejestru w przyszłości, w razie potrzeby.
# 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."
}
Ten kod jest dostępny w witrynie GitHub.
Po uruchomieniu tego skryptu uruchom ponownie proces programu SQL Server, aby nowe ustawienia protokołu TLS zaczęły obowiązywać. Jeśli teraz uruchomisz kod wymieniony na początku artykułu, zwraca on następujące elementy:
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
Zwróć uwagę, że połączenie ssl 2.0, SSL 3.0, TLS 1.0 i TLS 1.1 kończy się niepowodzeniem, ale zarówno tls 1.2, jak i TLS 1.3 kończą się powodzeniem.
Po aktualizacji rejestru system Windows i to wystąpienie programu SQL Server zezwalają tylko na połączenia TLS 1.2 i TLS 1.3. Później, gdy więcej klientów obsługuje protokół TLS 1.3, można również wyłączyć protokół TLS 1.2.
Ustaw wystąpienie serwera SQL Server na wymuszanie ścisłego szyfrowania
Ostatnim krokiem jest ustawienie wystąpienia, aby używać Force Strict Encryption
. W przypadku Force Strict Encryption
wystąpienie SQL używa obsługiwanej wersji strumienia danych tabelarycznych (TDS 8.0 lub nowszego).
Użyj programu SQL Server Configuration Manager, aby ustawić to ustawienie.
Rozwiń konfigurację sieci SQL Server
Kliknij prawym przyciskiem myszy Protokoły dla
<instance name>
, a następnie wybierz WłaściwościDomyślną nazwą wystąpienia jest MSSQLSERVER.
Na karcie Flagi ustaw Force Strict Encryption na Tak
Weryfikowanie zabezpieczeń
W tej sekcji pokazano, jak używać narzędzia Wireshark, OpenSSL i Nmap do weryfikowania szyfrowania.
Wireshark
Możesz użyć analizatorów sieciowych, aby określić wersję protokołu TLS i uzgodniony zestaw szyfrów. Niektóre dane mogą być mylące. Jeśli spojrzysz na poniższy zrzut ekranu z narzędzia Wireshark, zobaczysz, że pakiet jest warstwą rekordów TLS w wersji 1.3, ale wersja protokołu to TLS 1.2, a wersja protokołu uzgadniania jest również protokołem TLS 1.2. Jest to cała część specyfikacji protokołu TLS 1.2 i jest poprawna i oczekiwana. Uzgodniona wersja protokołu znajduje się w sekcji „Rozszerzenia”, a jak widać, pole supported_versions wskazuje na TLS 1.3.
OpenSSL
Możesz również użyć polecenia openssl, aby odnaleźć uzgodnione informacje dotyczące protokołu TLS.
Użyj następującego polecenia:
openssl s_client 127.0.0.1:1433
Polecenie zwraca wyniki, takie jak:
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
Bieżąca wersja narzędzia Nmap w wersji 7.94 wydaje się nie wykrywać protokołu TLS 1.3 w przypadku używania:
nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1
.
Powiązana zawartość
- Nawiązywanie połączenia z programem SQL Server przy użyciu ścisłego szyfrowania
- Transport Layer Security i certyfikaty cyfrowe
- wymagania dotyczące certyfikatów dla programu SQL Server
- Konfiguracja silnika bazy danych SQL Server do szyfrowania połączeń
- obsługa protokołu TLS 1.3
- TDS 8.0
- ustawienia rejestru protokołu Transport Layer Security (TLS)