Configurer le protocole TLS 1.3
S’applique à : SQL Server 2022 (16.x) et versions ultérieures
Cet article explique comment :
- Configurer une instance de SQL Server 2022 (16.x) pour utiliser le protocole TLS 1.3 et TLS 1.2
- Vérifier que les protocoles sont opérationnels
- Désactiver les protocoles plus anciens et non sécurisés, notamment TLS 1.0 et 1.1
Spécifications
La prise en charge de TLS 1.3 dans SQL Server 2022 (16.x) nécessite :
- Windows Server 2022
- SQL Server 2022 (16.x) avec la mise à jour cumulative 1 ou version ultérieure
- L’instance SQL Server utilise TCP/IP comme protocole réseau
- Un certificat de serveur X.509 valide installé avec sa clé privée
Important
Ce document part du principe que vos exigences incluent TLS 1.3 et TLS 1.2 à court terme, et uniquement TLS 1.3 à long terme.
SQL Server et le protocole TLS
SQL Server n’effectue pas d’opérations TLS elle-même, mais ce travail est effectué par Windows à l’aide du fournisseur de services partagés Schannel. Schannel est un fournisseur SSP (Security Support Provider) qui contient et expose l’implémentation par Microsoft des protocoles de sécurité norme Internet tels que TLS. Schannel est pour Windows ce qu’OpenSSL est sur Linux.
La configuration de TLS pour SQL Server nécessite la configuration de TLS pour Windows.
Avec SQL Server 2022 (16.x) sur Windows Server 2022, SQL Server prend en charge TLS 1.0, 1.1, 1.2 et 1.3. Pour vérifier cela, utilisez le code .NET disponible dans GitHub sur TlsTest. La sortie de l'outil ressemble à ceci :
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
Configurer Windows pour utiliser uniquement TLS 1.2 et TLS 1.3
Windows dispose d’un ensemble de clés de Registre sous HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
ce contrôle des versions de protocole TLS, ainsi que des suites de chiffrement. Pour ce scénario, seules les versions de protocole qui affectent les serveurs importent, car l’instance SQL Server agit en tant que serveur.
Le script PowerShell suivant met à jour le Registre pour activer ou désactiver TLS 1.0 et TLS 1.1 lorsqu’il est utilisé par les serveurs :
Avertissement
Avant de continuer, sauvegarder le Registre. Cela vous permettra de restaurer le Registre à l’avenir, si nécessaire.
# Learn more at https://zcusa.951200.xyz/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."
}
Ce code est disponible sur GitHub.
Une fois ce script exécuté, redémarrez le processus serveur SQL pour que les nouveaux paramètres TLS prennent effet. Si vous exécutez maintenant le code mentionné au début de l’article, il retourne :
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
Notez que SSL 2.0, SSL 3.0, TLS 1.0 et TLS 1.1 ne parviennent pas à se connecter, mais tls 1.2 et TLS 1.3 réussissent.
Après la mise à jour du Registre, Windows et cette instance de SQL Server autorisent uniquement les connexions TLS 1.2 et TLS 1.3. Plus tard, lorsque d’autres clients prennent en charge TLS 1.3, vous pouvez également désactiver TLS 1.2.
Définir l’instance SQL Server pour forcer le chiffrement strict
La dernière étape consiste à configurer l'instance pour qu'elle utilise Force Strict Encryption
. Avec Force Strict Encryption
, l’instance SQL utilise une version prise en charge de tabular data stream (TDS 8.0 ou version ultérieure).
Utilisez Gestionnaire de configuration SQL Server pour définir ce paramètre.
Développez Configuration réseau SQL Server
Faites un clic droit sur Protocoles pour
<instance name>
, puis sélectionnez Propriétés.MSSQLSERVER est le nom de l'instance par défaut.
Sous l’onglet Indicateurs, définissez Forcer le chiffrement strict sur Oui
Vérifier la sécurité
Cette section montre comment utiliser Wireshark, OpenSSL et Nmap pour vérifier le chiffrement.
Wireshark
Vous pouvez utiliser des niffers réseau pour déterminer la version du protocole TLS et la suite de chiffrement acceptée. Vous pouvez trouver des données déroutantes. Si vous examinez la capture d’écran ci-dessous à partir de Wireshark, il indique que le paquet est une couche d’enregistrements TLS v1.3, mais la version du protocole est TLS 1.2 et la version du protocole de négociation est également TLS 1.2. Cela fait partie de la spécification TLS 1.2 et est correcte et attendue. La version de protocole acceptée se trouve dans la section Extensions et, comme vous pouvez le voir, supported_versions est TLS 1.3.
OpenSSL
Vous pouvez également utiliser openssl pour découvrir les informations TLS acceptées.
Utilisez la commande suivante :
openssl s_client 127.0.0.1:1433
La commande retourne des résultats similaires à ce qui suit :
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
La version actuelle de Nmap, version 7.94, semble ne pas détecter TLS 1.3 lors de l’utilisation :
nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1
.
Contenu connexe
- Se connecter à SQL Server avec le chiffrement strict
- Protocole TLS et les certificats numériques
- Exigences des certificats pour SQL Server
- Configurer le moteur de base de données SQL Server pour le chiffrement des connexions
- Prise en charge du protocole TLS 1.3
- TDS 8.0
- Paramètres du Registre protocole TLS