Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för: SQL Server 2022 (16.x) och senare versioner
Den här artikeln beskriver hur du:
- Konfigurera en instans av SQL Server 2022 (16.x) för att använda TLS (Transport Layer Security) 1.3 och TLS 1.2
- Kontrollera att protokollen är i drift
- Inaktivera äldre, osäkra protokoll, inklusive TLS 1.0 och 1.1
Krav
TLS 1.3-stöd i SQL Server 2022 (16.x) kräver:
- Windows Server 2022
- SQL Server 2022 (16.x) med kumulativ uppdatering 1 eller senare
- SQL Server-instansen använder TCP/IP som ett nätverksprotokoll
- Ett giltigt X.509-servercertifikat installerat tillsammans med dess privata nyckel
Viktig
Det här dokumentet förutsätter att dina krav omfattar både TLS 1.3 och TLS 1.2 på kort sikt och endast TLS 1.3 på lång sikt.
SQL Server och TLS
SQL Server utför inte själva TLS-åtgärderna, utan det här arbetet utförs av Windows med hjälp av Schannel SSP-. Schannel är en SSP (Security Support Provider) som innehåller och exponerar Microsofts implementering av internetstandardsäkerhetsprotokoll som TLS. Schannel är till Windows vad OpenSSL är till Linux.
För att konfigurera TLS för SQL Server måste du konfigurera TLS för Windows.
Med SQL Server 2022 (16.x) på Windows Server 2022 stöder SQL Server TLS 1.0, 1.1, 1.2 och 1.3. Kontrollera detta genom att använda .NET-kod som är tillgänglig i GitHub på TlsTest. Utdata från verktyget ser ut så här:
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
Konfigurera Windows att endast använda TLS 1.2 och TLS 1.3
Windows har en uppsättning registernycklar under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL som styr TLS-protokollversioner samt chiffersviter. I det här scenariot är det bara protokollversionerna som påverkar servrarna, eftersom SQL Server-instansen fungerar som en server.
Följande PowerShell-skript uppdaterar registret för att aktivera eller inaktivera TLS 1.0 och TLS 1.1 när de används av servrar:
Varning
Innan du fortsätter säkerhetskopiera registret. På så sätt kan du återställa registret i framtiden, om det behövs.
# Learn more at https://free.blessedness.top/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."
}
Den här koden är tillgänglig i GitHub.
När du har kört det här skriptet startar du om SQL Server-processen för att de nya TLS-inställningarna ska börja gälla. Om du nu kör koden som nämns i början av artikeln returneras:
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
Observera att SSL 2.0, SSL 3.0, TLS 1.0 och TLS 1.1 alla inte kan ansluta, men både TLS 1.2 och TLS 1.3 lyckas.
Efter registeruppdateringen tillåter Windows och den här instansen av SQL Server endast TLS 1.2- och TLS 1.3-anslutningar. Senare, när fler klienter stöder TLS 1.3, kan du också inaktivera TLS 1.2.
Ange SQL Server-instans för att tvinga fram strikt kryptering
Det sista steget är att ange att instansen ska använda Force Strict Encryption. Med Force Strict Encryptionanvänder SQL-instansen en version av tabelldataströmmen som stöds (TDS 8.0 eller senare).
Använd SQL Server Configuration Manager för att ange den här inställningen.
Expandera SQL Server Network Configuration
Högerklicka på protokoll för
<instance name>och välj EgenskaperEtt standardinstansnamn är MSSQLSERVER.
På fliken Flaggor anger du Framtvinga strikt kryptering till Ja
Kontrollera säkerheten
Det här avsnittet visar hur du använder Wireshark, OpenSSL och Nmap för att verifiera kryptering.
Wireshark
Du kan använda nätverkssniffare för att fastställa TLS-protokollversionen och den överenskomna chiffersviten. Du kanske tycker att vissa data är förvirrande. Om du tittar på skärmbilden nedan från Wireshark visar den att paketet är ett TLS v1.3-postlager, men protokollversionen är TLS 1.2 och Handshake Protocol-versionen är också TLS 1.2. Allt detta är en del av TLS 1.2-specifikationen och är korrekt och förväntat. Den överenskomna protokollversionen finns i avsnittet Tillägg, och som du ser är supported_versions TLS 1.3.
OpenSSL
Du kan också använda openssl för att identifiera den överenskomna TLS-informationen.
Använd följande kommando:
openssl s_client 127.0.0.1:1433
Kommandot returnerar resultat som:
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
Den aktuella versionen av Nmap, version 7.94, verkar inte identifiera TLS 1.3 när du använder:
nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1.