Delen via


Toepassingen ondervinden geforceerd gesloten TLS-verbindingsfouten bij het verbinden van SQL-servers in Windows

Dit artikel helpt bij het oplossen van een probleem dat optreedt wanneer een toepassing probeert een verbinding met een SQL Server te openen.

Van toepassing op: Windows Server 2019, Windows Server 2016
Oorspronkelijk KB-nummer: 4557473

Symptomen

Wanneer een toepassing probeert een verbinding met een SQL Server te openen, wordt een van de volgende foutberichten weergegeven:

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.)

Als u SChannel-logboekregistratie op de server hebt ingeschakeld, ontvangt u gebeurtenis-id 36888 (er is een fatale waarschuwing gegenereerd) wanneer het probleem optreedt.

Notitie

  • Afhankelijk van de provider of het stuurprogramma dat u gebruikt, kan het foutbericht enigszins variëren.
  • Dit probleem treedt ook op wanneer een toepassing die wordt uitgevoerd op Windows Server 2012 R2 verbinding probeert te maken met SQL Server die wordt uitgevoerd op Windows Server 2019.
  • Andere client-servertoepassingen kunnen een vergelijkbaar probleem ondervinden.

Oorzaak

Windows 10, versie 1511 en nieuwere versies van Windows, waaronder Windows Server 2016 of Windows 10, versie 1607 waarop updates zijn uitgebracht op 25 februari, bevat een voorloopnul-update. Ondertussen bevatten alle Windows-versies die eerder werden uitgebracht geen voorloopnulupdates.

De TLS-client en -server moeten sleutels op exact dezelfde manier berekenen, anders krijgen ze verschillende resultaten. TLS-verbindingen mislukken willekeurig als voorloopnullen verschillend worden berekend door de TLS-client en TLS-servers.

Wanneer een Diffie-Hellman-sleuteluitwisselingsgroep voorloopnullen heeft, kunnen niet-gepatchte computers de mac onjuist berekenen door niet rekening te maken met de opgevulde nullen. Dit probleem wordt meestal gezien bij interactie met niet-Windows-crypto-implementaties en kan onregelmatige onderhandelingsfouten veroorzaken.

De foutberichten worden geretourneerd wanneer de beveiligde TLS-handshake wordt onderhandeld tussen de client en de server met behulp van TLS_DHE coderingssuite. Het gebruik van een van de betrokken coderingssuites kan worden geïdentificeerd in het pakket 'Server Hello'. Zie het netwerkfragment in de sectie Meer informatie voor meer informatie.

Oplossing

Als u dit probleem wilt oplossen, moet u ervoor zorgen dat zowel de client als de server die betrokken zijn bij een verbinding Windows uitvoert waarop de voorloopnuloplossingen voor TLS_DHE zijn geïnstalleerd. Het is raadzaam om de updates te installeren omdat ze de conformiteit met TLS_DHE specificaties verbeteren.

Hieronder ziet u de versie van het besturingssysteem op basis van de updates die zijn geïnstalleerd.

Windows-versies met de voorloopnuloplossingen voor TLS_DHE

  • Windows Server 2016, versie 1607
    • KB 4537806: 25 februari 2020-KB4537806 (os build 14393.3542)
    • KB-4540670: 10 maart 2020-KB4540670 (os build 14393.3564)
    • Updates die KB4537806 en KB4540670 vervangen voor de respectieve besturingssysteemversies
  • Windows Server 2019 RTM en latere versies.
  • Windows 10, versie 1511 en nieuwere versies van Windows 10 (zie releasegeschiedenis)

Windows-versies die geen voorloopnuloplossingen voor TLS_DHE bevatten

  • Windows Server 2016, versie 1607-servers waarop de patches KB-4537806 en KB-4540670 niet zijn toegepast.
  • Windows 10, versie 1507
  • Windows 8.1
  • Windows 7
  • Windows Server 2012 R2 en eerdere versies van Windows Server

Tijdelijke oplossing

Als u Windows niet kunt bijwerken als tijdelijke oplossing, kunt u de TLS_DHE coderingen uitschakelen met behulp van een van de twee methoden.

Met behulp van Groepsbeleid

TLS_DHE_* coderingen kunnen worden uitgeschakeld met behulp van Groepsbeleid. Raadpleeg Prioritizing Schannel Cipher Suites om het groepsbeleid SSL Cipher Suite Order te configureren.

Beleids-URL: Computerconfiguratie -> Beheersjablonen - Netwerk ->> SSL-configuratie-instellingen
Beleidsinstelling: ssl Cipher Suite Order-instelling.

Met behulp van een PowerShell-script

foreach ($CipherSuite in $(Get-TlsCipherSuite).Name)
{
    if ( $CipherSuite.substring(0,7) -eq "TLS_DHE" )
    {
       "Disabling cipher suite: " + $CipherSuite
       Disable-TlsCipherSuite -Name $CipherSuite
    }
    else
    {
        "Existing enabled cipher suite will remain enabled: " + $CipherSuite
    }
}

Meer informatie

U kunt bevestigen dat u dit probleem ondervindt tijdens het tot stand komen van de verbinding. Wanneer het probleem zich voordoet, ziet u de volgende reeks in de netwerktracering op de server.

1103479 <DateTime> 382.4104867 <Application IP> <Server IP> TCP:Flags=CE....S., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174047, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192  
1103486 <DateTime> 382.4105589 <Server IP> <Application IP> TCP: [Bad CheckSum]Flags=...A..S., SrcPort=1433, DstPort=62702, PayloadLen=0, Seq=267349053, Ack=829174048, Win=65535 ( Negotiated scale factor 0x8 ) = 16776960  
1103493 <DateTime> 382.4113628 <Application IP> <Server IP> TCP:Flags=...A...., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174048, Ack=267349054, Win=513 (scale factor 0x8) = 131328  
1103515 <DateTime> 382.4117349 <Application IP> <Server IP> TDS:Prelogin, Version = 7.300000(No version information available, using the default version), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=62702, DstPort=1433, PayloadLen=88, Seq=829174048 - 829174136, Ack=267349054, Win=131328  
1103525 <DateTime> 382.4118186 <Server IP> <Application IP> TDS:Response, Version = 7.300000(No version information available, using the default version), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=1433, DstPort=62702, PayloadLen=48, Seq=267349054 - 267349102, Ack=829174136, Win=2102272  
1103547 <DateTime> 382.4128101 <Application IP> <Server IP> TLS:TLS Rec Layer-1 HandShake: Client Hello.  
1103584 <DateTime> 382.4151314 <Server IP> <Application IP> TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.  
1103595 <DateTime> 382.4161185 <Application IP> <Server IP> TCP:Flags=...A...., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174322, Ack=267351024, Win=513 (scale factor 0x8) = 131328  
1103676 <DateTime> 382.4782629 <Application IP> <Server IP> TLS:TLS Rec Layer-1 HandShake: Client Key Exchange.; TLS Rec Layer-2 Cipher Change Spec; TLS Rec Layer-3 HandShake: Encrypted Handshake Message.  
1103692 <DateTime> 382.4901904 <Server IP> <Application IP> TCP:[Segment Lost] [Bad CheckSum]Flags=...A...F, SrcPort=1433, DstPort=62702, PayloadLen=0, Seq=267351024, Ack=829174648, Win=8210 (scale factor 0x8) = 2101760  
1103696 <DateTime> 382.4918048 <Application IP> <Server IP> TCP:Flags=...A...., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174648, Ack=267351025, Win=513 (scale factor 0x8) = 131328  
1103718 <DateTime> 382.4931068 <Application IP> <Server IP> TCP:Flags=...A...F, SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174648, Ack=267351025, Win=513 (scale factor 0x8) = 131328  
1103723 <DateTime> 382.4931475 <Server IP> <Application IP> TCP: [Bad CheckSum]Flags=...A...., SrcPort=1433, DstPort=62702, PayloadLen=0, Seq=267351025, Ack=829174649, Win=8210 (scale factor 0x8) = 2101760  

Bekijk het Hello-pakket server om te zien dat de suite met codering wordt gebruikt:

Frame: Number = 1103584, Captured Frame Length = 2093, MediaType = NetEvent  
+NetEvent:  
+MicrosoftWindowsNDISPacketCapture: Packet Fragment (1976 (0x7B8) bytes)  
+Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-00-0C-9F-F4-5C],SourceAddress:[00-1D-D8-B8-3A-7B]  
+Ipv4: Src = <Server IP>, Dest = <Application IP>, Next Protocol = TCP, Packet ID = 16076, Total IP Length = 0  
+Tcp: [Bad CheckSum]Flags=...AP..., SrcPort=1433, DstPort=62702, PayloadLen=1938, Seq=267349102 - 267351040, Ack=829174322, Win=8211 (scale factor 0x8) = 2102016  
+Tds: Prelogin, Version = 7.300000(No version information available, using the default version), SPID = 0, PacketID = 0, Flags=...AP..., SrcPort=1433, DstPort=62702, PayloadLen=1938, Seq=267349102 - 267351040, Ack=829174322, Win=2102016  
TLSSSLData: Transport Layer Security (TLS) Payload Data  
-TLS: TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.  
-TlsRecordLayer: TLS Rec Layer-1 HandShake:  
ContentType: HandShake:  
+Version: TLS 1.2  
Length: 1909 (0x775)  
-SSLHandshake: SSL HandShake Server Hello Done(0x0E)  
HandShakeType: ServerHello(0x02)  
Length: 81 (0x51)  
-ServerHello: 0x1  
+Version: TLS 1.2  
+RandomBytes:  
SessionIDLength: 32 (0x20)  
SessionID: Binary Large Object (32 Bytes)  
TLSCipherSuite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 { 0x00, 0x9F }  
CompressionMethods: 0 (0x0)  
ExtensionsLength: 9 (0x9)  
+ServerHelloExtension: Unknown Extension Type  
+ServerHelloExtension: Renegotiation Info(0xFF01)  
HandShakeType: Certificate(0x0B)  
Length: 778 (0x30A)  
+Cert: 0x1  
HandShakeType: Server Key Exchange(0x0C)  
Length: 1034 (0x40A)  
ServerKeyExchange: Binary Large Object (1034 Bytes)  
HandShakeType: Server Hello Done(0x0E)  
Length: 0 (0x0)  
+Tds: Prelogin, Version = 7.300000(No version information available, using the default version), Reassembled Packet

Verwijzing

Raadpleeg voor meer informatie de volgende artikelen: