Anwendungen können TLS-Verbindungsfehler beim Verbinden von SQL-Servern in Windows deutlich geschlossen werden.
In diesem Artikel wird ein Problem behoben, 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
Problembeschreibung
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 trat während des Anmeldevorgangs ein Fehler auf. (Anbieter: SSL-Anbieter, Fehler: 0 – Eine vorhandene Verbindung wurde vom Remotehost forcibly geschlossen.)
Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Handshakes vor der Anmeldung trat ein Fehler auf. (Anbieter: TCP-Anbieter, Fehler: 0 – Eine vorhandene Verbindung wurde vom Remotehost forcibly geschlossen.)
Wenn Sie die SChannel-Protokollierung auf dem Server aktiviert haben, erhalten Sie beim Auftreten des Problems die Ereignis-ID 36888 (Eine schwerwiegende Warnung wurde generiert).
Notiz
- Je nach anbieter oder treiber, den Sie verwenden, kann die Fehlermeldung geringfügig variieren.
- Dieses Problem tritt auch auf, wenn eine Anwendung unter Windows Server 2012 R2 versucht, eine Verbindung mit SQL Server herzustellen, die unter Windows Server 2019 ausgeführt wird.
- Bei anderen Clientserveranwendungen tritt möglicherweise ein ähnliches Problem auf.
Ursache
Windows 10, Version 1511 und neuere Versionen von Windows, einschließlich Windows Server 2016 oder Windows 10, Version 1607, das updates, die am 25. Februar veröffentlicht wurden, enthält ein führendes Nullupdate. In der Zwischenzeit enthalten alle Windows-Versionen, die zuvor veröffentlicht wurden, keine führenden Null-Updates.
Der TLS-Client und der Server müssen Schlüssel genau auf die gleiche Weise berechnen, andernfalls erhalten sie unterschiedliche Ergebnisse. TLS-Verbindungen schlagen zufällig fehl, wenn führende Nullen vom TLS-Client und TLS-Servern unterschiedlich berechnet werden.
Wenn eine Diffie-Hellman-Schlüsselaustauschgruppe führende Nullen hat, können nicht gepatchte Computer den Mac fälschlicherweise berechnen, indem die gepolsterten Nullen nicht berücksichtigt werden. Dieses Problem wird in der Regel bei der Interaktion mit nicht windowsbasierten Kryptoimplementierungen gesehen und kann zeitweilige Aushandlungsfehler verursachen.
Die Fehlermeldungen werden zurückgegeben, wenn der sichere TLS-Handshake zwischen dem Client und dem Server mithilfe TLS_DHE Verschlüsselungssuite ausgehandelt wird. Die Verwendung einer der betroffenen Verschlüsselungssammlungen kann im Paket "Server Hello" identifiziert werden. Weitere Informationen finden Sie im Netzwerkausschnitt im Abschnitt "Weitere Informationen".
Lösung
Um dieses Problem zu beheben, stellen Sie sicher, dass sowohl der client als auch der Server, der an einer Verbindung beteiligt ist, Windows ausführen, die die führenden Nullfixes für TLS_DHE installiert haben. Es wird empfohlen, die Updates zu installieren, da sie die Konformität mit TLS_DHE Spezifikationen verbessern.
Die folgende Liste enthält die Betriebssystemversion gemäß den installierten Updates.
Windows-Versionen, die die führenden Nullfixes für TLS_DHE enthalten
- Windows Server 2016, Version 1607
- KB 4537806: 25. Februar 2020-KB4537806 (Betriebssystembuild 14393.3542)
- KB 4540670: 10. März 2020-KB4540670 (Betriebssystembuild 14393.3564)
- Updates, die KB4537806 und KB4540670 für die jeweiligen Betriebssystemversionen ersetzen
- Windows Server 2019 RTM und höhere Versionen.
- Windows 10, Version 1511 und höhere Versionen von Windows 10 (siehe Versionsverlauf)
Windows-Versionen, die keine führenden Nullfixes für TLS_DHE enthalten
- Windows Server 2016, Version 1607-Server, auf denen die Patches kb 4537806 und KB 4540670 angewendet wurden.
- Windows 10, Version 1507
- Windows 8,1
- Windows 7
- Windows Server 2012 R2 und frühere Versionen von Windows Server
Problemumgehung
Wenn Sie Windows nicht aktualisieren können, können Sie die TLS_DHE Chiffre mithilfe einer der beiden Methoden deaktivieren.
Verwenden von Gruppenrichtlinien
TLS_DHE_* Chiffre können mithilfe von Gruppenrichtlinien deaktiviert werden. Lesen Sie die Priorisierung von Schannel Cipher Suites , um die Gruppenrichtlinie "SSL Cipher Suite Order" zu konfigurieren.
Richtlinien-URL: Computerkonfiguration -> Administrative Vorlagen -> Netzwerk -> SSL-Konfigurationseinstellungen
Richtlinieneinstellung: EINSTELLUNG der SSL-Verschlüsselungssuite.
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 Verbindungseinrichtung auftritt. Wenn das Problem auftritt, können Sie die folgende Sequenz in der Netzwerkablaufverfolgung auf dem Server sehen.
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üsselungssuite anzuzeigen:
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
Verweis
Weitere Informationen finden Sie in den folgenden Artikeln: