Anwendungen treten beim Herstellen einer Verbindung mit SQL Server in Windows erzwungene TLS-Verbindungsfehler auf.

Dieser Artikel hilft bei der Behebung eines Problems, das auftritt, wenn eine Anwendung versucht, eine Verbindung mit einem SQL Server zu öffnen.

Gilt für: Windows Server 2019, Windows Server 2016
Ursprüngliche KB-Nummer: 4557473

Symptome

Wenn eine Anwendung versucht, eine Verbindung mit einem SQL Server zu öffnen, wird eine der folgenden Fehlermeldungen angezeigt:

Eine Verbindung mit dem Server wurde erfolgreich hergestellt, aber dann ist während des Anmeldevorgangs ein Fehler aufgetreten. (Anbieter: SSL-Anbieter, Fehler: 0 – Eine vorhandene Verbindung wurde vom Remotehost erzwungen geschlossen.)

Eine Verbindung mit dem Server wurde erfolgreich hergestellt, aber dann ist während des Handshakes vor der Anmeldung ein Fehler aufgetreten. (Anbieter: TCP-Anbieter, Fehler: 0 – Eine vorhandene Verbindung wurde vom Remotehost erzwungen geschlossen.)

Wenn Sie die SChannel-Protokollierung auf dem Server aktiviert haben, erhalten Sie die Ereignis-ID 36888 (Eine schwerwiegende Warnung wurde generiert), wenn das Problem auftritt.

Hinweis

  • Je nach Anbieter oder Treiber, den Sie verwenden, kann die Fehlermeldung geringfügig variieren.
  • Dieses Problem tritt auch auf, wenn eine Anwendung, die auf Windows Server 2012 R2 ausgeführt wird, versucht, eine Verbindung mit SQL Server herzustellen, die unter Windows Server 2019 ausgeführt wird.
  • Bei anderen Client-Server-Anwendungen kann ein ähnliches Problem auftreten.

Ursache

Windows 10, Version 1511 und höher von Windows, einschließlich Windows Server 2016 oder Windows 10, Version 1607, für die Updates am 25. Februar veröffentlicht wurden. In der Zwischenzeit enthalten alle Windows-Versionen, die zuvor veröffentlicht wurden, keine führenden Updates.

Der TLS-Client und -Server müssen Schlüssel genau auf die gleiche Weise berechnen, da sie andernfalls unterschiedliche Ergebnisse erhalten. TLS-Verbindungen schlagen zufällig fehl, wenn führende Nullen vom TLS-Client und den TLS-Servern unterschiedlich berechnet werden.

Wenn eine Diffie-Hellman-Schlüsselaustauschgruppe führende Nullen aufweist, berechnen nicht gepatchte Computer den Mac möglicherweise fälschlicherweise, indem sie die aufgefüllten Nullen nicht berücksichtigen. Dieses Problem tritt in der Regel bei der Interaktion mit nicht Windows-basierten Kryptografieimplementierungen auf und kann zu zeitweiligen Aushandlungsfehlern führen.

Die Fehlermeldungen werden zurückgegeben, wenn der sichere TLS-Handshake zwischen dem Client und dem Server mithilfe TLS_DHE Verschlüsselungssammlung ausgehandelt wird. Die Verwendung einer der betroffenen Verschlüsselungssammlungen kann im Paket "Server Hello" identifiziert werden. Weitere Informationen finden Sie im Abschnitt "Weitere Informationen" im Netzwerkausschnitt.

Lösung

Um dieses Problem zu beheben, stellen Sie sicher, dass sowohl auf dem Client als auch auf dem Server, der an einer Verbindung beteiligt ist, Windows ausgeführt wird, auf denen die führenden Nullkorrekturen für TLS_DHE installiert sind. Es wird empfohlen, die Updates zu installieren, da sie die Konformität mit TLS_DHE Spezifikationen verbessern.

Im Folgenden wird die Betriebssystemversion entsprechend den installierten Updates aufgeführt.

Windows-Versionen, die die führenden Nullkorrekturen für TLS_DHE

  • Windows Server 2016, Version 1607
    • KB-4537806: 25. Februar 2020 bis KB4537806 (BS-Build 14393.3542)
    • KB-4540670: 10. März 2020-KB4540670 (Betriebssystembuild 14393.3564)
    • Updates, die KB4537806 und KB4540670 für die jeweiligen Betriebssystemversionen ablösen
  • Windows Server 2019 RTM und höhere Versionen.
  • Windows 10, Version 1511 und höher von Windows 10 (siehe Versionsverlauf)

Windows-Versionen, die keine führenden Nullkorrekturen für TLS_DHE

  • Windows Server 2016 4540670 Auf Servern der Version 1607, auf die die Patches kb 4537806 und KB nicht installiert sind.
  • Windows 10, Version 1507
  • Windows 8.1
  • Windows 7
  • Windows Server 2012 R2 und früheren Versionen von Windows Server

Problemumgehung

Wenn Sie Windows nicht aktualisieren können, können Sie die TLS_DHE Mit einer der beiden Methoden deaktivieren.

Verwenden von Gruppenrichtlinien

TLS_DHE_*-Verschlüsselungen können mithilfe von Gruppenrichtlinie deaktiviert werden. Informationen zum Konfigurieren der Gruppenrichtlinie "SSL Cipher Suite Order" finden Sie unter Priorisieren von Schannel Cipher Suite Suites .

Richtlinien-URL: Computerkonfiguration –> Administrative Vorlagen –> Netzwerk –> SSL-Konfigurationseinstellungen
Richtlinieneinstellung: Einstellung für die Reihenfolge der SSL-Verschlüsselungssammlung.

Verwenden eines PowerShell-Skripts

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
    }
}

Weitere Informationen

Sie können bestätigen, dass dieses Problem während der Verbindungsherstellung auftritt. Wenn das Problem auftritt, sehen Sie die folgende Sequenz in der Netzwerkablaufverfolgung auf dem 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  

Untersuchen des Server Hello-Pakets, um die verwendete Verschlüsselungssammlung zu sehen:

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

Referenz

Weitere Informationen finden Sie in den folgenden Artikeln: