Une connexion existante a été fermée de force par l’hôte distant (erreur de système d’exploitation 10054)
S’applique à : SQL Server
Remarque
Avant de commencer à résoudre un problème, nous vous recommandons de consulter les prérequis et de parcourir la liste de vérification.
Cet article détaille différents scénarios et fournit des solutions pour les erreurs suivantes :
-
Une connexion a été établie avec le serveur, mais une erreur s’est ensuite produite pendant le processus d’ouverture de session. (fournisseur : fournisseur SSL, erreur : 0 - Une connexion existante a été fermée de force par l’hôte distant.)
-
Une connexion a été établie avec le serveur, mais une erreur s’est produite lors de l’établissement d’une liaison préalable à la connexion. (fournisseur : fournisseur TCP, erreur : 0 - Une connexion existante a été fermée de force par l’hôte distant.)
L’erreur du système d’exploitation 10054 est générée dans la couche de sockets Windows. Pour plus d’informations, consultez Codes d’erreur Windows Sockets : WSAECONNRESET 10054.
Quand voyez-vous l’erreur ?
Le canal sécurisé, également appelé Schannel, est un fournisseur de support de sécurité (SSP). Il contient un ensemble de protocoles de sécurité qui fournissent une authentification d’identité et une communication privée sécurisée via le chiffrement. L’une des fonctions de SSP Schannel est d’implémenter différentes versions du protocole TLS (Transport Layer Security). Ce protocole est une norme de l’industrie conçue pour protéger la confidentialité des informations communiquées sur Internet.
Le protocole TLS Handshake est responsable de l’échange de clés nécessaire pour établir ou reprendre des sessions sécurisées entre deux applications communiquant via TCP. Pendant la phase de pré-connexion du processus de connexion, les applications clientes et SQL Server utilisent le protocole TLS pour établir un canal sécurisé pour la transmission des informations d’identification.
Les scénarios suivants détaillent les erreurs qui se produisent lorsque l’établissement d’une liaison ne peut pas être terminé :
Scénario 1 : Il n’existe aucun protocole TLS correspondant entre le client et le serveur
Ssl (Secure Socket Layer) et les versions de TLS antérieures à TLS 1.2 présentent plusieurs vulnérabilités connues. Nous vous encourageons à effectuer une mise à niveau vers TLS 1.2 et à désactiver les versions antérieures dans la mesure du possible. En conséquence, les administrateurs système peuvent envoyer des mises à jour via une stratégie de groupe ou d’autres mécanismes pour désactiver ces versions TLS non sécurisées sur différents ordinateurs de votre environnement.
Des erreurs de connectivité se produisent lorsque votre application utilise une version antérieure du pilote ODBC (Open Database Connectivity), du fournisseur OLE DB, des composants .NET Framework ou une version SQL Server qui ne prend pas en charge TLS 1.2. Le problème se produit parce que le serveur et le client ne peuvent pas trouver de protocole correspondant (par exemple, TLS 1.0 ou TLS 1.1). Un protocole correspondant est nécessaire pour terminer l’établissement d’une liaison TLS requise pour poursuivre la connexion.
Résolution
Pour résoudre ce problème, appliquez l’une des méthodes suivantes :
- Mettez à niveau votre SQL Server ou vos fournisseurs clients vers une version prenant en charge TLS 1.2. Pour plus d’informations, consultez Prise en charge de TLS 1.2 pour Microsoft SQL Server.
- Demandez aux administrateurs système d’activer temporairement TLS 1.0 ou TLS 1.1 sur les ordinateurs client et serveur en effectuant l’une des actions suivantes :
- Utilisez l’onglet Suites de chiffrement dans l’outil Iis Crypto pour valider et apporter des modifications aux paramètres TLS actuels.
- Démarrez la Rédacteur du Registre et recherchez les clés de Registre spécifiques à Schannel :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
. Pour plus d’informations, consultez Flux de travail de mise à niveau TLS 1.2 et Erreurs SSL après la mise à niveau vers TLS 1.2.
Scénario 2 : Correspondance des protocoles TLS sur le client et le serveur, mais pas de suites de chiffrement TLS correspondantes
Ce scénario se produit lorsque vous ou votre administrateur avez restreint certains algorithmes sur le client ou le serveur pour une sécurité supplémentaire.
Les versions tls client et serveur, les suites de chiffrement peuvent être facilement examinées dans les paquets Hello Hello client et serveur dans une trace réseau. Le paquet Hello client publie toutes les suites de chiffrement client, tandis que le paquet Hello serveur en spécifie l’une. S’il n’existe aucune suite correspondante, le serveur ferme la connexion au lieu de répondre au paquet server Hello.
Résolution
Pour case activée le problème, procédez comme suit :
Si aucune trace réseau n’est disponible, case activée la valeur des fonctions sous cette clé de Registre :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
Utilisez la commande PowerShell suivante pour rechercher les fonctions TLS.
Get-ItemPropertyValue -Path HKLM:\System\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002\ -Name Functions
Utilisez l’onglet Suites de chiffrement dans l’outil Iis Crypto pour case activée s’il existe des algorithmes correspondants. Si aucun algorithme correspondant n’est trouvé, contactez Support Microsoft.
Pour plus d’informations, consultez Flux de travail de mise à niveau TLS 1.2 et les connexions TLS (Transport Layer Security) peuvent échouer ou expirer lors de la connexion ou de la tentative de reprise.
Scénario 3 : Les chiffrements TLS_DHE peuvent être activés
Ce problème se produit lorsque le client ou le serveur est hébergé sur Windows 2012, 2016 et versions ultérieures. Bien que les deux versions de système d’exploitation possèdent le même chiffrement (TLS_DHE*), Windows 2012 et 2016+ gèrent les clés de chiffrement dans le PROTOCOLE TLS différemment. Cela peut entraîner des erreurs de communication.
Résolution
Pour résoudre ce problème, supprimez tous les chiffrements commençant par « TLS_DHE* » de la stratégie locale. Pour plus d’informations sur les erreurs qui se produisent lorsque des applications tentent de se connecter à SQL Server dans Windows, consultez Les applications rencontrent des erreurs de connexion TLS fermées de force lors de la connexion de serveurs SQL Server dans Windows.
Scénario 4 : SQL Server utilise un certificat signé par un algorithme de hachage faible, tel que MD5, SHA224 ou SHA512
SQL Server chiffre toujours les paquets réseau liés à la connexion. À cet effet, il utilise un certificat provisionné manuellement ou un certificat auto-signé. Si SQL Server trouve un certificat qui prend en charge la fonction d’authentification du serveur dans le magasin de certificats, il utilise le certificat. SQL Server utilise ce certificat même s’il n’a pas été provisionné manuellement. Si ces certificats utilisent un algorithme de hachage faible (algorithme d’empreinte numérique) tel que MD5, SHA224 ou SHA512, ils ne fonctionnent pas avec TLS 1.2 et provoquent l’erreur mentionnée précédemment.
Remarque
Les certificats auto-signés ne sont pas affectés par ce problème.
Résolution
Pour résoudre ce problème, procédez comme suit :
- Dans Gestionnaire de configuration SQL Server, développez SQL Server Configuration réseau dans le volet Console.
- Sélectionnez Protocoles pour <instance nom>.
- Sélectionnez l’onglet Certificat et suivez l’étape appropriée :
- Si un certificat est affiché, sélectionnez Affichage pour examiner l’algorithme d’empreinte numérique afin de vérifier s’il utilise un algorithme de hachage faible. Ensuite, sélectionnez Effacer et passez à l’étape 4.
- Si aucun certificat n’est affiché, passez en revue le journal des erreurs SQL Server pour rechercher une entrée qui ressemble à ce qui suit et notez la valeur de hachage ou d’empreinte numérique :
2017-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption
- Pour supprimer l’authentification du serveur, procédez comme suit :
- Sélectionnez Démarrerl’exécution>, puis tapez MMC. (MMC également appelée Console de gestion Microsoft.)
- Dans MMC, ouvrez les certificats et sélectionnez Compte d’ordinateur dans l’écran du composant logiciel enfichable Certificats .
- Développez Certificats personnels>.
- Recherchez le certificat que SQL Server utilise par son nom ou en examinant la valeur Empreinte numérique des différents certificats dans le magasin de certificats et ouvrez son volet Propriétés.
- Sous l’onglet Général , sélectionnez Activer uniquement les objectifs suivants et désélectionnez Authentification du serveur.
- Redémarrez le service SQL Server.
Scénario 5 : Le client et le serveur utilisent TLS_DHE suite de chiffrement pour l’établissement d’une liaison TLS, mais l’un des systèmes n’a pas de correctifs non significatifs pour le TLS_DHE installé
Pour plus d’informations sur ce scénario, consultez Les applications rencontrent des erreurs de connexion TLS fermées de force lors de la connexion de serveurs SQL Server dans Windows.
Remarque
Si cet article n’a pas résolu votre problème, vous pouvez case activée si les articles sur les problèmes de connectivité courants peuvent vous aider.
Scénario 6 : Délai d’expiration de l’établissement d’une liaison tcp Three-Way (échec SYN, rejet TCP) en raison d’une pénurie de workers IOCP
Dans les systèmes avec des charges de travail élevées sur SQL Server 2017 et versions antérieures, vous pouvez observer une erreur intermittente 10054 causée par des échecs d’établissement d’une liaison TCP triple, ce qui entraîne des rejets TCP. La cause racine de ce problème peut être le retard dans le traitement des TCPAcceptEx
demandes. Ce retard peut être dû à une pénurie d’écouteurs IOCP (Input/Output Completion Port) chargés de gérer l’acceptation des connexions entrantes. Le nombre insuffisant de workers IOCP et de personnes occupées à traiter d’autres demandes entraînent un retard dans le traitement des demandes de connexion, ce qui entraîne des échecs d’établissement de la liaison et des rejets TCP. Vous pouvez également observer des délais d’expiration de connexion pendant l’établissement d’une liaison SSL de démarrage (le cas échéant) ou le traitement des demandes de connexion, qui impliquent des vérifications d’authentification.
Résolution
Une pénurie de workers IOCP et de ressources SOS Worker allouées à la gestion des opérations d’authentification et de chiffrement est la cause la main des délais d’expiration de la négociation tcp triple et des délais d’expiration de connexion supplémentaires. SQL Server 2019 comprend plusieurs améliorations des performances dans ce domaine. Une amélioration notable est l’implémentation d’un pool de répartiteurs de connexion dédié. Cela optimise l’allocation des ressources pour les tâches liées à la connexion, ce qui réduit les délais d’expiration et améliore les performances globales du système.
Autres scénarios où les connexions TLS échouent
Si le message d’erreur que vous rencontrez ne correspond à aucun des scénarios précédents, reportez-vous aux scénarios supplémentaires suivants :
- Les SQL Server locales ne peuvent pas se connecter à un serveur lié lorsque le chiffrement RSA est utilisé
- Une erreur de connexion 10054 peut se produire après SQL Server mise à niveau
- Des erreurs de connexion intermittentes se produisent lors de l’ajout d’un nœud à l’environnement Always On dans SQL Server
- Des erreurs de connexion intermittentes se produisent lors de l’utilisation de l’utilitaire SQLCMD
- L’erreur SSL_PE_NO_CIPHER se produit sur le point de terminaison 5022 dans SQL Server
- Une erreur de connectivité 0x80004005 se produit à partir d’échecs de SQL Sever Agent SSIS
- Erreur « Le client ne peut pas établir la connexion » après l’implémentation des stratégies de suite de chiffrement sur un ordinateur SQL Server
- Erreur « Échec de la connexion au serveur lié » après la mise à jour de Windows Server
- SQL Server Agent ne parvient pas à démarrer lors de la connexion à SQL Server
- Erreur lors de la connexion d’une version supérieure à une version inférieure de SQL Server à l’aide de SQL Server fonctionnalité de serveur lié
Voir aussi
Exclusion de responsabilité de tiers
Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.