Een bestaande verbinding is geforceerd gesloten door de externe host (besturingssysteemfout 10054)
Van toepassing op: SQL Server
Notitie
Voordat u begint met het oplossen van problemen, raden we u aan de vereisten te controleren en de controlelijst te doorlopen.
In dit artikel worden verschillende scenario's beschreven en worden oplossingen geboden voor de volgende fouten:
-
Er is een verbinding tot stand gebracht met de server, maar er is een fout opgetreden tijdens het aanmeldingsproces. (provider: SSL-provider, fout: 0 - Een bestaande verbinding is geforceerd gesloten door de externe host.)
-
Er is een verbinding met de server tot stand gebracht, maar vervolgens is er een fout opgetreden tijdens de handshake voorafgaand aan de aanmelding. (provider: TCP-provider, fout: 0 - Een bestaande verbinding is geforceerd gesloten door de externe host.)
De fout 10054 van het besturingssysteem wordt gegenereerd in de Laag Windows-sockets. Zie Windows Sockets-foutcodes: WSAECONNRESET 10054 voor meer informatie.
Wanneer ziet u de fout?
Secure Channel, ook wel bekend als Schannel, is een SSP (Security Support Provider ). Het bevat een set beveiligingsprotocollen die identiteitsverificatie bieden en persoonlijke communicatie beveiligen via versleuteling. Een functie van Schannel SSP is het implementeren van verschillende versies van het TLS-protocol (Transport Layer Security). Dit protocol is een industriestandaard die is ontworpen ter bescherming van de privacy van informatie die via internet wordt gecommuniceerd.
Het TLS Handshake Protocol is verantwoordelijk voor de sleuteluitwisseling die nodig is om beveiligde sessies tot stand te brengen of te hervatten tussen twee toepassingen die communiceren via TCP. Tijdens de fase vóór aanmelding van het verbindingsproces gebruiken SQL Server en clienttoepassingen het TLS-protocol om een beveiligd kanaal tot stand te brengen voor het verzenden van referenties.
In de volgende scenario's worden fouten beschreven die optreden wanneer de handshake niet kan worden voltooid:
Scenario 1: er bestaan geen overeenkomende TLS-protocollen tussen de client en de server
Secure Socket Layer (SSL) en versies van TLS ouder dan TLS 1.2 hebben verschillende bekende beveiligingsproblemen. U wordt aangeraden om waar mogelijk een upgrade uit te voeren naar TLS 1.2 en eerdere versies uit te schakelen. Daarom kunnen systeembeheerders updates pushen via groepsbeleid of andere mechanismen om deze onveilige TLS-versies op verschillende computers in uw omgeving uit te schakelen.
Connectiviteitsfouten treden op wanneer uw toepassing gebruikmaakt van een eerdere versie van het ODBC-stuurprogramma (Open Database Connectivity), OLE DB-provider, .NET Framework-onderdelen of een SQL Server-versie die TLS 1.2 niet ondersteunt. Het probleem treedt op omdat de server en de client geen overeenkomend protocol kunnen vinden (zoals TLS 1.0 of TLS 1.1). Er is een overeenkomend protocol nodig om de TLS-handshake te voltooien die nodig is om door te gaan met de verbinding.
Oplossing
Gebruik een van de volgende methoden om dit op te lossen:
- Upgrade uw SQL Server of uw clientproviders naar een versie die TLS 1.2 ondersteunt. Zie TLS 1.2-ondersteuning voor Microsoft SQL Server voor meer informatie.
- Vraag uw systeembeheerders om TLS 1.0 of TLS 1.1 tijdelijk in te schakelen op zowel de client als de servercomputers door een van de volgende acties uit te voeren:
- Gebruik het tabblad Coderingssuites in het hulpprogramma IIS Crypto om de huidige TLS-instellingen te valideren en te wijzigen.
- Start de Register-editor en zoek de Schannel-specifieke registersleutels:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
. Zie TLS 1.2-upgradewerkstroom en SSL-fouten na een upgrade naar TLS 1.2 voor meer informatie.
Scenario 2: Overeenkomende TLS-protocollen op de client en de server, maar geen overeenkomende TLS-coderingssuites
Dit scenario treedt op wanneer u of uw beheerder bepaalde algoritmen op de client of de server beperkt voor extra beveiliging.
De client- en server-TLS-versies, coderingssuites kunnen eenvoudig worden onderzocht in de Client Hello - en Server Hello-pakketten in een netwerktracering. Het Client Hello-pakket kondigt alle coderingssuites van de client aan, terwijl het Server Hello-pakket een van deze pakketten aangeeft. Als er geen overeenkomende suites zijn, sluit de server de verbinding in plaats van te reageren op het Server Hello-pakket .
Oplossing
Volg deze stappen om het probleem te controleren:
Als een netwerktracering niet beschikbaar is, controleert u de functiewaarde onder deze registersleutel:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
Gebruik de volgende PowerShell-opdracht om de TLS-functies te vinden.
Get-ItemPropertyValue -Path HKLM:\System\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002\ -Name Functions
Gebruik het tabblad Coderingssuites in het hulpprogramma IIS Crypto om te controleren of er overeenkomende algoritmen zijn. Als er geen overeenkomende algoritmen worden gevonden, neemt u contact op met Microsoft Ondersteuning.
Zie TLS 1.2-upgradewerkstroom - en Transport Layer Security-verbindingen (TLS) kunnen mislukken of time-outs hebben wanneer u verbinding maakt of een hervatting probeert uit te voeren.
Scenario 3: De TLS_DHE coderingen zijn mogelijk ingeschakeld
Dit probleem treedt op wanneer de client of server wordt gehost op Windows 2012, 2016 en hogere versies. Ondanks beide besturingssysteemversies met dezelfde codering (TLS_DHE*), verwerken Windows 2012 en 2016+ cryptografiesleutels binnen de TLS anders. Dit kan leiden tot communicatiefouten.
Oplossing
Als u dit probleem wilt oplossen, verwijdert u alle coderingen die beginnen met 'TLS_DHE*' uit het lokale beleid. Zie Voor meer informatie over fouten die optreden wanneer toepassingen verbinding proberen te maken met SQL Server in Windows, toepassingen geforceerd gesloten TLS-verbindingsfouten bij het verbinden van SQL-servers in Windows.
Scenario 4: SQL Server gebruikt een certificaat dat is ondertekend door een zwak hash-algoritme, zoals MD5, SHA224 of SHA512
SQL Server versleutelt altijd netwerkpakketten die betrekking hebben op aanmelden. Hiervoor wordt een handmatig ingericht certificaat of een zelfondertekend certificaat gebruikt. Als SQL Server een certificaat vindt dat ondersteuning biedt voor de serververificatiefunctie in het certificaatarchief, wordt het certificaat gebruikt. SQL Server maakt gebruik van dit certificaat, zelfs als het niet handmatig is ingericht. Als deze certificaten een zwak hash-algoritme (vingerafdrukalgoritme) gebruiken, zoals MD5, SHA224 of SHA512, werken ze niet met TLS 1.2 en veroorzaken ze de eerder genoemde fout.
Notitie
Zelfondertekende certificaten worden niet beïnvloed door dit probleem.
Oplossing
Volg deze stappen om het probleem op te lossen:
- Vouw in SQL Server Configuration Manager SQL Server-netwerkconfiguratie uit in het deelvenster Console.
- Selecteer Protocollen voor <de naam> van het exemplaar.
- Selecteer het tabblad Certificaat en volg de relevante stap:
- Als er een certificaat wordt weergegeven, selecteert u Weergave om het vingerafdrukalgoritmen te onderzoeken om te controleren of het een zwak hash-algoritme gebruikt. Selecteer Vervolgens Wissen en ga naar stap 4.
- Als er geen certificaat wordt weergegeven, controleert u het SQL Server-foutenlogboek voor een vermelding die lijkt op het volgende en noteert u de hash- of vingerafdrukwaarde:
2017-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption
- Gebruik de volgende stappen om serververificatie te verwijderen:
- Selecteer Starten>Uitvoeren en typ MMC. (MMC ook wel bekend als de Microsoft Management Console.)
- Open in MMC de certificaten en selecteer Computeraccount in het scherm Certificatenmodule .
- Vouw Personal>Certificates uit.
- Zoek het certificaat dat SQL Server gebruikt op basis van de naam of door de vingerafdrukwaarde van verschillende certificaten in het certificaatarchief te bekijken en het deelvenster Eigenschappen te openen.
- Selecteer op het tabblad Algemeen de optie Alleen de volgende doeleinden inschakelen en schakel Serververificatie uit.
- Start de SQL Server-service opnieuw.
Scenario 5: De client en de server gebruiken TLS_DHE coderingssuite voor TLS-handshake, maar een van de systemen heeft geen voorloopnuloplossingen voor de TLS_DHE geïnstalleerd
Zie Toepassingen ondervinden fouten vanwege een geforceerd gesloten TLS-verbinding bij het verbinding maken met SQL -servers in Windows voor meer informatie over dit scenario.
Notitie
Als dit artikel uw probleem niet heeft opgelost, kunt u controleren of de artikelen over veelvoorkomende verbindingsproblemen u kunnen helpen.
Scenario 6: TIME-out van TCP-handshake (SYN fail, TCP-afwijzing) vanwege een tekort aan IOCP-werkrollen
In systemen met hoge werkbelastingen op SQL Server 2017 en eerder ziet u mogelijk onregelmatige 10054-fout die wordt veroorzaakt door tcp-handshakefouten in drie richtingen, wat leidt tot TCP-afwijzingen. De hoofdoorzaak van dit probleem kan de vertraging in het verwerken TCPAcceptEx
van aanvragen veroorzaken. Deze vertraging kan worden veroorzaakt door een tekort aan IOCP-listenermedewerkers (Input/Output Completion Port) die verantwoordelijk zijn voor het beheren van de acceptatie van binnenkomende verbindingen. Het onvoldoende aantal IOCP-werknemers en het bezet onderhoud van andere aanvragen leidt tot vertraagde verwerking van verbindingsaanvragen, wat uiteindelijk resulteert in handshakefouten en TCP-afwijzingen. U kunt ook time-outs voor aanmelding bekijken tijdens de ssl-handshake (indien aanwezig) of de verwerking van aanmeldingsaanvragen, die betrekking hebben op verificatiecontroles.
Oplossing
Een tekort aan IOCP-werkrollen en SOS Worker-resources die zijn toegewezen voor het afhandelen van verificatie- en versleutelingsbewerkingen, is de belangrijkste oorzaak van de time-outs voor TCP-handshake en extra time-outs voor aanmelding. SQL Server 2019 bevat verschillende prestatieverbeteringen op dit gebied. Een belangrijke verbetering is de implementatie van een toegewezen groep voor aanmeldingsverzenders. Hiermee optimaliseert u de toewijzing van resources voor aanmeldingsgerelateerde taken, waardoor er minder time-outs optreden en de algehele systeemprestaties worden verbeterd.
Andere scenario's waarbij TLS-verbindingen mislukken
Als het foutbericht dat u tegenkomt niet overeenkomt met een van de vorige scenario's, raadpleegt u de volgende aanvullende scenario's:
- Lokale SQL Server kan geen verbinding maken met een gekoppelde server wanneer RSA-versleuteling wordt gebruikt
- Er kan een verbindingsfout 10054 optreden na de SQL Server-upgrade
- Onregelmatige verbindingsfouten treden op bij het toevoegen van een knooppunt aan de AlwaysOn-omgeving in SQL Server
- Onregelmatige verbindingsfouten treden op bij het gebruik van het SQLCMD-hulpprogramma
- De SSL_PE_NO_CIPHER fout treedt op op eindpunt 5022 in SQL Server
- Connectiviteitsfout 0x80004005 optreedt bij SSIS-fouten met SQL-serveragent
- Fout 'Client kan geen verbinding tot stand brengen' na het implementeren van het coderingspakketbeleid op een SQL Server-machine
- Fout 'Verbinding met de gekoppelde server is mislukt' nadat u Windows Server hebt bijgewerkt
- SQL Server Agent kan niet worden gestart tijdens het maken van verbinding met SQL Server
- Fout bij het verbinden met een hogere versie van SQL Server met behulp van de functionaliteit van SQL Server Linked Server
Zie ook
Disclaimerinformatie van derden
De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.