Konfigurieren von TLS 1.3
Gilt für: SQL Server 2022 (16.x) und höhere Versionen
In diesem Artikel wird Folgendes erläutert:
- Wie Sie eine Instanz von SQL Server 2022 (16.x) für die Verwendung von Transport Layer Security (TLS) 1.3 und TLS 1.2 konfigurieren
- Wie Sie überprüfen, ob die Protokolle einsatzfähig sind
- Wie Sie ältere, unsichere Protokolle deaktivieren, einschließlich TLS 1.0 und 1.1
Anforderungen
Die TLS 1.3-Unterstützung in SQL Server 2022 (16.x) erfordert Folgendes:
- Windows Server 2022
- SQL Server 2022 (16.x) mit kumulativem Update 1 oder höher
- Die SQL Server-Instanz verwendet TCP/IP als Netzwerkprotokoll
- Ein gültiges X.509-Serverzertifikat, das zusammen mit seinem privaten Schlüssel installiert ist
Wichtig
In diesem Dokument wird davon ausgegangen, dass Ihre Anforderungen kurzfristig sowohl TLS 1.3 als auch TLS 1.2 und nur TLS 1.3 langfristig umfassen.
SQL Server und TLS
SQL Server führt selbst keine TLS-Vorgänge aus. Diese Arbeit wird von Windows mit Hilfe von Schannel SSP ausgeführt. Schannel ist ein Security Support Provider (SSP), der Microsofts Implementierung von Internet-Standard-Sicherheitsprotokollen wie TLS enthält und verfügbar macht. Schannel ist für Windows, was OpenSSL für Linux ist.
Das Konfigurieren von TLS für SQL Server erfordert die Konfiguration von TLS für Windows.
Mit SQL Server 2022 (16.x) auf Windows Server 2022 unterstützt SQL Server TLS 1.0, 1.1, 1.2 und 1.3. Um das zu überprüfen, verwenden Sie bitte .NET-Code, der in GitHub unter TlsTest verfügbar ist. Die Ausgabe dieses Tools sieht wie folgt aus:
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
Konfigurieren von Windows für die ausschließliche Verwendung von TLS 1.2 und TLS 1.3
Windows verfügt über eine Reihe von Registrierungsschlüsseln unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
, die TLS-Protokollversionen sowie Verschlüsselungssammlungen steuern. Für dieses Szenario sind nur die Protokollversionen von Bedeutung, die Server betreffen, da die SQL Server-Instanz als Server fungiert.
Das folgende PowerShell-Skript aktualisiert die Registrierung, um TLS 1.0 und TLS 1.1 zu aktivieren oder zu deaktivieren, wenn es von Servern genutzt wird:
Warnung
Bevor Sie fortfahren, sichern Sie bitte die Registrierung. So können Sie die Registrierung später bei Bedarf wiederherstellen.
# 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."
}
Dieser Code ist auf GitHub verfügbar.
Nachdem Sie dieses Skript ausgeführt haben, starten Sie den SQL Serverprozess neu, damit die neuen TLS-Einstellungen wirksam werden. Wenn Sie nun den Code ausführen, der am Anfang des Artikels erwähnt wurde, erhalten Sie Folgendes zurück:
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
Beachten Sie, dass SSL 2.0, SSL 3.0, TLS 1.0 und TLS 1.1 alle nicht verbunden werden können. Bei TLS 1.2 und TLS 1.3 kommt die Verbindung hingegen zustande.
Nach dem Registrierungsupdate lassen Windows und diese Instanz von SQL Server nur noch TLS 1.2- und TLS 1.3-Verbindungen zu. Später, wenn mehr Clients TLS 1.3 unterstützen, können Sie auch TLS 1.2 deaktivieren.
Konfigurieren der SQL Server-Instanz, um strenge Verschlüsselung zu erzwingen
Der letzte Schritt besteht darin, festzulegen, dass die Instanz Force Strict Encryption
verwenden muss. Bei Force Strict Encryption
verwendet die SQL-Instanz eine unterstützte Version des Tabular Data Stream (TDS 8.0 oder höher).
Verwenden Sie den SQL Server-Konfigurations-Manager, um diese Einstellung festzulegen.
Erweitern Sie SQL Server-Netzwerkkonfiguration.
Klicken Sie mit der rechten Maustaste auf Protokolle für
<instance name>
und dann auf EigenschaftenEin Name der Standardinstanz lautet MSSQLSERVER.
Setzen Sie auf der Registerkarte Flags „Strenge Verschlüsselung erzwingen“ auf „Ja“.
Überprüfen der Sicherheit
In diesem Abschnitt wird die Verwendung von Wireshark, OpenSSL und Nmap zum Überprüfen der Verschlüsselung gezeigt.
WireShark
Sie können Netzwerk-Sniffer verwenden, um die TLS-Protokollversion und die vereinbarte Verschlüsselungssuite zu bestimmen. Möglicherweise finden Sie einige Daten verwirrend. Sehen Sie sich das nachstehende Bildschirmfoto von Wireshark an. Es zeigt, dass das Paket eine TLS-v1.3-Datensatzebene ist, die Protokollversion jedoch TLS 1.2 und die Handshake-Protokollversion ebenfalls TLS 1.2. Das alles ist Teil der TLS 1.2-Spezifikation, ist zu erwarten und richtig. Die vereinbarte Protokollversion befindet sich im Abschnitt „Erweiterungen“, und wie Sie sehen können, sind die supported_versions TLS 1.3.
OpenSSL
Sie können die vereinbarten TLS-Informationen auch über openssl ermitteln.
Verwenden Sie den folgenden Befehl:
openssl s_client 127.0.0.1:1433
Der Befehl gibt Ergebnisse ähnlich den folgenden zurück:
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
Die aktuelle Version von Nmap, Version 7.94, scheint TLS 1.3 nicht zu erkennen, wenn Folgendes verwendet wird:
nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1
.
Zugehöriger Inhalt
- Herstellen einer Verbindung mit SQL Server mithilfe des Verschlüsselungstyps „Strict“
- Transport Layer Security und digitale Zertifikate
- Zertifikatanforderungen für SQL Server
- Konfigurieren der SQL Server-Datenbank-Engine zum Verschlüsseln von Verbindungen
- Unterstützung für TLS 1.3
- TDS 8.0
- Registrierungseinstellungen für Transport Layer Security (TLS)