Configurer le moteur de base de données SQL Server pour le chiffrement des connexions

S’applique à : SQL Server - Windows uniquement

Vous pouvez chiffrer toutes les connexions entrantes à SQL Server ou activer le chiffrement seulement pour un ensemble spécifique de clients. Pour ces deux scénarios, vous devez d’abord configurer SQL Server afin d’utiliser un certificat répondant aux exigences de certificat pour SQL Server, et prendre ensuite des mesures supplémentaires sur l’ordinateur serveur ou les ordinateurs clients pour chiffrer les données.

Remarque

Cet article s’applique à SQL Server sur Windows. Pour configurer SQL Server sur Linux afin de chiffrer les connexions, consultez Spécifier les paramètres TLS.

Cet article explique comment configurer SQL Server pour les certificats (Étape 1) et modifier les paramètres de chiffrement de l’instance SQL Server (Étape 2). Les deux étapes sont nécessaires pour chiffrer toutes les connexions entrantes à SQL Server lors de l’utilisation d’un certificat d’une autorité commerciale publique. Pour d’autres scénarios, consultez Cas spéciaux de chiffrement des connexions à SQL Server.

Étape 1 : Configurer SQL Server pour utiliser des certificats

Pour configurer SQL Server afin d’utiliser les certificats décrits dans Exigences de certificat pour SQL Server, procédez comme suit :

  1. Installez le certificat sur l’ordinateur qui exécute SQL Server.
  2. Configurez SQL Server pour utiliser le certificat installé.

Selon la version du Gestionnaire de configuration SQL Server à laquelle vous avez accès sur l’ordinateur SQL Server, utilisez une des procédures suivantes pour installer et configurer l’instance SQL Server.

Ordinateurs avec Gestionnaire de configuration SQL Server pour SQL Server 2019 et versions ultérieures

Dans SQL Server 2019 (15.x) et versions ultérieures, la gestion des certificats est intégrée au Gestionnaire de configuration SQL Server et peut être utilisée avec les versions antérieures de SQL Server. Pour ajouter un certificat sur une instance SQL Server unique, dans une configuration de cluster de basculement ou dans une configuration de groupe de disponibilité, consultez Gestion des certificats (Gestionnaire de configuration SQL Server). Le Gestionnaire de configuration simplifie considérablement la gestion des certificats en s’occupant de l’installation du certificat et de la configuration de SQL Server pour l’utilisation du certificat installé en seulement quelques étapes.

Les certificats sont stockés localement pour les utilisateurs de l'ordinateur. Pour installer un certificat que SQL Server va utiliser, vous devez exécuter le Gestionnaire de configuration SQL Server avec un compte disposant des privilèges d’administrateur local.

Vous pouvez installer temporairement une édition Express de SQL Server 2019 (15.x) ou une version ultérieure pour utiliser le Gestionnaire de configuration SQL Server, qui prend en charge la gestion intégrée des certificats.

Ordinateurs avec Gestionnaire de configuration SQL Server pour SQL Server 2017 et versions antérieures

Si vous utilisez SQL Server 2017 (14.x) ou une version antérieure, et que le Gestionnaire de configuration SQL Server pour SQL Server 2019 (15.x) n’est pas disponible, procédez comme suit pour installer et configurer le certificat sur l’ordinateur SQL Server :

  1. Dans le menu Démarrer, sélectionnez Exécuter et, dans la zone Ouvrir, tapez MMC et sélectionnez OK.
  2. Dans la console MMC, dans le menu Fichier, sélectionnez Ajouter/supprimer un composant logiciel enfichable....
  3. Dans la boîte de dialogue Ajouter/supprimer des composants logiciels enfichables, sélectionnez Certificats, puis sélectionnez Ajouter.
  4. Dans la boîte de dialogue Composant logiciel enfichable Certificats, sélectionnez Compte d’ordinateur, puis sélectionnez Suivant>Terminer.
  5. Dans la boîte de dialogue Ajouter ou supprimer des composants logiciels enfichables, sélectionnez OK.
  6. Dans la console MMC, développez Certificats (ordinateur local)>Personnel, cliquez avec le bouton droit sur Certificats, pointez sur Toutes les tâches, puis sélectionnez Importer.
  7. Effectuez les étapes de l’Assistant Importation de certificat pour ajouter un certificat à l’ordinateur.
  8. Dans la console MMC, cliquez avec le bouton droit sur le certificat importé, pointez sur Toutes les tâches, puis sélectionnez Gérer les clés privées. Dans la boîte de dialogue Sécurité, ajoutez l’autorisation de lecture pour le compte d’utilisateur utilisé par le compte de service SQL Server.
  9. Dans le Gestionnaire de configuration SQL Server, développez Configuration du réseau SQL Server, cliquez avec le bouton droit sur Protocoles pour <instance serveur>, puis sélectionnez Propriétés.
  10. Dans la boîte de dialogue Protocoles pour <nom d’instance> Propriétés, sous l’onglet Certificat, sélectionnez le certificat souhaité dans la liste déroulante de la zone Certificat, puis cliquez sur OK.
  11. Si vous voulez que toutes les connexions à SQL Server soient chiffrées, consultez Étape 2 : Configurer les paramètres de chiffrement dans SQL Server. Si vous voulez activer le chiffrement seulement pour des clients spécifiques, redémarrez le service SQL Server et consultez Cas spéciaux pour le chiffrement des connexions à SQL Server.

Remarque

Pour installer des certificats dans la configuration du groupe de disponibilité, répétez la procédure précédente sur chaque nœud de votre groupe de disponibilité, en commençant par le nœud principal.

Important

Le compte de service SQL Server doit disposer d’autorisations de lecture sur le certificat utilisé pour forcer le chiffrement sur l’instance SQL Server. Pour un compte de service sans privilèges, les autorisations de lecture doivent être ajoutées au certificat. Si vous ne le faites pas, vous risquez de provoquer l’échec du redémarrage du service SQL Server.

Procédure supplémentaire pour les instances de cluster de basculement

Le certificat utilisé par SQL Server pour chiffrer les connexions est spécifié dans la clé de Registre suivante :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\SuperSocketNetLib\Certificate

Cette clé contient une propriété du certificat connue sous le nom de « empreinte numérique », qui identifie chaque certificat sur le serveur. Dans un environnement cluster, cette clé est définie sur Null, même si le certificat approprié existe dans le magasin. Pour résoudre ce problème, vous devez effectuer ces étapes supplémentaires sur chacun de vos nœuds de cluster après avoir installé le certificat sur chaque nœud :

  1. Accédez au magasin de certificats où le certificat de nom de domaine complet (FQDN) est stocké. Dans la page des propriétés du certificat, accédez à l’onglet Détails et copiez la valeur de l’empreinte numérique du certificat dans une fenêtre du Bloc-notes.

  2. Supprimez les espaces entre les caractères hexadécimaux de la valeur de l’empreinte numérique dans le Bloc-notes.

  3. Démarrez l’Éditeur du Registre, accédez à la clé de Registre suivante, puis collez la valeur de l’étape 2 :

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate

  4. Si le serveur virtuel SQL se trouve actuellement sur ce nœud, basculez vers un autre nœud de votre cluster et redémarrez le nœud où la modification du Registre s’est produite.

  5. Répétez cette procédure sur tous les nœuds.

Avertissement

Une modification incorrecte du Registre peut sérieusement endommager votre système. Avant d’apporter des modifications au Registre, nous vous recommandons de sauvegarder toutes les données importantes qui se trouvent sur l’ordinateur.

Notes

SQL Server 2008 R2 (10.50.x) et SQL Server 2008 R2 (10.50.x) Native Client (SNAC) prennent en charge les certificats génériques. SNAC a depuis été déprécié et remplacé par Microsoft OLE DB Driver pour SQL Server et Microsoft ODBC Driver for SQL Server. Les autres clients ne prennent pas toujours en charge les certificats génériques.

Vous ne pouvez pas sélectionner un certificat générique en utilisant le Gestionnaire de configuration SQL Server. Pour utiliser un certificat générique, modifiez le Registre de clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib, puis entrez l’empreinte numérique du certificat, sans espaces, comme valeur Certificat.

Notes

Pour utiliser le chiffrement à l'aide d'un cluster de basculement, installez le certificat du serveur avec le nom DNS complet du serveur virtuel sur tous les nœuds du cluster de basculement. Vous pouvez définir la valeur de l’option Forcer le chiffrement dans la zone de propriété Protocoles pour virtsql de Configuration du réseau SQL Server sur Oui.

Si vous devez créer des connexions chiffrées pour un indexeur Recherche Azure vers SQL Server sur une machine virtuelle Azure, consultez Connexions de l’indexeur à une instance SQL sur une machine virtuelle Azure.

Étape 2 : Configurer les paramètres de chiffrement dans SQL Server

Les étapes suivantes sont nécessaires seulement si vous voulez forcer des communications chiffrées pour tous les clients :

  1. Dans le Gestionnaire de configuration SQL Server, développez Configuration du réseau SQL Server, cliquez avec le bouton droit sur Protocoles pour < instance serveur>, puis sélectionnez Propriétés.
  2. Sous l’onglet Indicateurs, dans la zone ForceEncryption, sélectionnez Oui, puis sélectionnez OK pour fermer la boîte de dialogue.
  3. Redémarrez le service SQL Server.

Remarque

Certains scénarios de certificat peuvent nécessiter l’implémentation d’étapes supplémentaires sur l’ordinateur client et dans votre application cliente pour garantir des connexions chiffrées entre le client et le serveur. Pour plus d’informations, consultez, consultez Cas spéciaux de chiffrement des connexions à SQL Server.

Plus d’informations

Chiffrement des paquets de connexion et chiffrement des paquets de données

Il existe deux types de paquets dans le trafic réseau entre une application cliente SQL Server et SQL Server : les paquets d’informations d’identification (paquets de connexion) et les paquets de données. Quand vous configurez le chiffrement (côté serveur ou côté client), ces deux types de paquets sont toujours chiffrés. Cependant, même quand vous ne configurez pas le chiffrement, les informations d’identification (dans le paquet de connexion) qui sont transmises quand une application cliente se connecte à SQL Server sont toujours chiffrées. SQL Server utilise un certificat qui répond aux exigences de certificat d’une autorité de certification de confiance, s’il est disponible. Ce certificat est configuré manuellement par l’administrateur système en utilisant une des procédures décrites précédemment dans l’article ou présent dans le magasin de certificats sur l’ordinateur SQL Server.

Certificats auto-signés générés par SQL Server

SQL Server utilise un certificat d’une autorité de certification de confiance s’il est disponible pour le chiffrement des paquets de connexion. Si aucun certificat approuvé n’est installé, SQL Server génère un certificat auto-signé (certificat de secours) au démarrage et utilise ce certificat auto-signé pour chiffrer les informations d’identification. Ce certificat auto-signé permet d’améliorer la sécurité mais il ne fournit pas de protection contre une usurpation d’identité par le serveur. Si le certificat auto-signé est utilisé et si la valeur de l’option ForceEncryption est définie sur Yes, toutes les données transmises sur un réseau entre SQL Server et l’application cliente sont chiffrées en utilisant le certificat auto-signé.

Lorsque vous utilisez un certificat auto-signé, SQL Server consigne le message suivant dans le journal des erreurs :

Un certificat généré automatiquement a été chargé avec succès pour le chiffrement.

SQL Server 2016 (13.x) et antérieur utilisent l’algorithme SHA1. Cependant, l’algorithme SHA1 et de nombreux algorithmes plus anciens ont été dépréciés à compter de SQL Server 2016 (13.x). Pour plus d’informations, consultez Fonctionnalités du moteur de base de données déconseillées dans SQL Server 2016 (13.x).

Dans ces environnements, si vous utilisez le certificat auto-signé généré automatiquement par SQL Server, seulement pour la négociation de préconnexion ou pour le chiffrement de toutes les communications client-serveur, votre logiciel de détection des vulnérabilités, votre logiciel de sécurité ou vos stratégies d’entreprise peuvent signaler cette utilisation comme étant problème de sécurité. Vous disposez des options suivantes pour ces scénarios :

  • Créez un nouveau certificat auto-signé ou un certificat de tiers qui utilise des algorithmes de chiffrement plus forts, et configurez SQL Server pour utiliser ce nouveau certificat.
  • Comme vous comprenez maintenant la raison de l’indicateur, vous pouvez ignorer le message (non recommandé).
  • Effectuez une mise à niveau vers SQL Server 2017 (14.x) ou une version ultérieure, qui utilise un algorithme de hachage plus fort (SHA256) pour les certificats auto-signés.

Script PowerShell pour créer un certificat auto-signé pour SQL Server

L’extrait de code suivant peut être utilisé pour créer un certificat auto-signé sur un ordinateur exécutant SQL Server. Le certificat répond aux exigences de chiffrement d’une instance de SQL Server autonome et est enregistré dans le magasin de certificats de l’ordinateur local (PowerShell doit être lancé en tant qu’administrateur) :

# Define parameters
$certificateParams = @{
    Type = "SSLServerAuthentication"
    Subject = "CN=$env:COMPUTERNAME"
    DnsName = @("{0}" -f [System.Net.Dns]::GetHostByName($env:computerName).HostName, 'localhost')
    KeyAlgorithm = "RSA"
    KeyLength = 2048
    HashAlgorithm = "SHA256"
    TextExtension = "2.5.29.37={text}1.3.6.1.5.5.7.3.1"
    NotAfter = (Get-Date).AddMonths(36)
    KeySpec = "KeyExchange"
    Provider = "Microsoft RSA SChannel Cryptographic Provider"
    CertStoreLocation = "cert:\LocalMachine\My"
}

# Call the cmdlet
New-SelfSignedCertificate @certificateParams

Vérifier le chiffrement réseau

Pour vérifier que le chiffrement réseau est configuré et activé correctement, exécutez la requête Transact-SQL suivante :

USE [master];
GO

SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections;
GO

La colonne encrypt_option est une valeur booléenne indiquant si le chiffrement est activé pour cette connexion. Si la valeur est TRUE, la connexion est chiffrée de manière sécurisée. Si la valeur est FALSE, la connexion n’est pas chiffrée.

Comportement du certificat SQL Server avec autorisations

Le service SQL Server détecte et utilise automatiquement le certificat pour le chiffrement si toutes les conditions suivantes sont remplies :

  • Le certificat a un objet qui contient le nom de domaine complet de l’ordinateur
  • Le certificat est installé dans le magasin de certificats de l'ordinateur local
  • Le compte de service SQL Server a accès à la clé privée du certificat

Cette utilisation se produit même si le certificat n'est pas sélectionné dans le Gestionnaire de configuration SQL Server.

Pour remplacer ce comportement, procédez soit :

  • Configurer un autre certificat à utiliser dans le gestionnaire de configuration SQL Server

    ou

  • Supprimer les autorisations du compte de service SQL Server sur le certificat non souhaité