TLS 1.3 configureren
Van toepassing op: SQL Server 2022 (16.x) en latere versies
In dit artikel wordt uitgelegd hoe u:
- Een exemplaar van SQL Server 2022 (16.x) configureren voor het gebruik van Transport Layer Security (TLS) 1.3 en TLS 1.2
- Controleer of de protocollen operationeel zijn
- Oudere, onveilige protocollen uitschakelen, waaronder TLS 1.0 en 1.1
Eisen
Tls 1.3-ondersteuning in SQL Server 2022 (16.x) vereist:
- Windows Server 2022
- SQL Server 2022 (16.x) met cumulatieve update 1 of hoger
- Het SQL Server-exemplaar maakt gebruik van TCP/IP als netwerkprotocol
- Een geldig X.509-servercertificaat dat samen met de bijbehorende persoonlijke sleutel is geïnstalleerd
Belangrijk
In dit document wordt ervan uitgegaan dat uw vereisten zowel TLS 1.3 als TLS 1.2 op korte termijn bevatten en alleen TLS 1.3 op de lange termijn.
SQL Server en TLS
SQL Server voert geen TLS-bewerkingen zelf uit, maar dit werk wordt uitgevoerd door Windows met behulp van Schannel-SSP-. Schannel is een SSP (Security Support Provider) die microsoft's implementatie van internetstandaardbeveiligingsprotocollen zoals TLS bevat en beschikbaar maakt. Schannel is voor Windows wat OpenSSL is voor Linux.
Voor het configureren van TLS voor SQL Server moet TLS voor Windows worden geconfigureerd.
Met SQL Server 2022 (16.x) op Windows Server 2022 ondersteunt SQL Server TLS 1.0, 1.1, 1.2 en 1.3. Als u dit wilt controleren, gebruikt u .NET-code die beschikbaar is in GitHub op TlsTest. De uitvoer van het hulpprogramma ziet er als volgt uit:
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 configureren voor alleen TLS 1.2 en TLS 1.3
Windows heeft een set registersleutels onder HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
die tls-protocolversies en coderingssuites beheren. Voor dit scenario zijn alleen de protocolversies van invloed op servers, omdat het SQL Server-exemplaar fungeert als een server.
Met het volgende PowerShell-script wordt het register bijgewerkt om TLS 1.0 en TLS 1.1 in of uit te schakelen wanneer dit wordt gebruikt door servers:
Waarschuwing
Voordat u doorgaat, u een back-up van het register maken. Hierdoor kunt u het register in de toekomst herstellen, indien nodig.
# 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."
}
Deze code is beschikbaar in GitHub-.
Nadat u dit script hebt uitgevoerd, start u het SQL Server-proces opnieuw om de nieuwe TLS-instellingen van kracht te laten worden. Als u nu de code uitvoert die wordt vermeld aan het begin van het artikel, wordt het volgende geretourneerd:
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
U ziet dat SSL 2.0, SSL 3.0, TLS 1.0 en TLS 1.1 allemaal geen verbinding maken, maar zowel TLS 1.2 als TLS 1.3 slagen.
Na de registerupdate staan Windows en dit exemplaar van SQL Server alleen TLS 1.2- en TLS 1.3-verbindingen toe. Wanneer meer clients TLS 1.3 ondersteunen, kunt u ook TLS 1.2 uitschakelen.
SQL Server-instantie instellen om strikte versleuteling te forceren
De laatste stap is het instellen van het exemplaar om Force Strict Encryption
te gebruiken. Met Force Strict Encryption
gebruikt het SQL-exemplaar een ondersteunde versie van een gegevensstroom in tabelvorm (TDS 8.0 of hoger).
Gebruik SQL Server Configuration Manager om deze instelling in te stellen.
Vouw de SQL Server-netwerkconfiguratie uit
Klik met de rechtermuisknop op Protocollen voor
<instance name>
en selecteer EigenschappenEen standaardexemplarennaam is MSSQLSERVER-.
Stel op het tabblad Flags de optie Strikte versleuteling afdwingen in op Ja
Beveiliging controleren
In deze sectie ziet u hoe u Wireshark, OpenSSL en Nmap gebruikt om versleuteling te verifiëren.
Wireshark
U kunt netwerk-sniffers gebruiken om de VERSIE van het TLS-protocol en overeengekomen coderingssuite te bepalen. Mogelijk vindt u een aantal gegevens verwarrend. Als u de onderstaande schermopname van Wireshark bekijkt, ziet u dat het pakket een TLS v1.3-recordlaag is, maar dat de protocolversie TLS 1.2 is en dat de handshake-protocolversie ook TLS 1.2 is. Dit maakt allemaal deel uit van de TLS 1.2-specificatie en is correct en verwacht. De overeengekomen protocolversie bevindt zich in de sectie Extensies en zoals u kunt zien, supported_versions TLS 1.3 is.
OpenSSL
U kunt ook openssl gebruiken om de overeengekomen TLS-informatie te detecteren.
Gebruik de volgende opdracht:
openssl s_client 127.0.0.1:1433
De opdracht retourneert resultaten zoals:
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
De huidige versie van Nmap, versie 7.94, lijkt TLS 1.3 niet te detecteren bij gebruik van:
nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1
.
Verwante inhoud
- verbinding maken met SQL Server met strikte versleuteling
- Transport Layer Security en digitale certificaten
- certificaatvereisten voor SQL Server-
- SQL Server Database Engine configureren voor het versleutelen van verbindingen
- ondersteuning voor TLS 1.3-ondersteuning
- TDS 8.0
- TLS-registerinstellingen (Transport Layer Security)