Partager via


Les applications rencontrent des erreurs de connexion TLS fermées de force lors de la connexion de serveurs SQL Dans Windows

Cet article vous aide à résoudre un problème qui se produit lorsqu’une application tente d’ouvrir une connexion à un SQL Server.

S’applique à : Windows Server 2019, Windows Server 2016
Numéro de la base de connaissances d’origine : 4557473

Symptômes

Lorsqu’une application tente d’ouvrir une connexion à un SQL Server, l’un des messages d’erreur suivants s’affiche :

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

Si vous avez activé la journalisation SChannel sur le serveur, vous recevrez l’ID d’événement 36888 (une alerte irrécupérable a été générée) lorsque le problème se produit.

Remarque

  • Selon le fournisseur ou le pilote que vous utilisez, le message d’erreur peut légèrement varier.
  • Ce problème se produit également lorsqu’une application s’exécutant sur Windows Server 2012 R2 tente de se connecter à SQL Server s’exécutant sur Windows Server 2019.
  • D’autres applications client-serveur peuvent rencontrer un problème similaire.

Cause

Windows 10, version 1511 et versions ultérieures de Windows, y compris Windows Server 2016 ou Windows 10, la version 1607 sur laquelle les mises à jour publiées le 25 févrierou les mises à jour ultérieures sont installées, contient une mise à jour zéro. Pendant ce temps, toutes les versions de Windows publiées avant ne contiennent pas les mises à jour zéro principales.

Le client et le serveur TLS doivent calculer les clés exactement de la même façon, sinon ils obtiennent des résultats différents. Les connexions TLS échouent de façon aléatoire si les zéros non significatifs sont calculés différemment par le client TLS et les serveurs TLS.

Lorsqu’un groupe d’échange de clés Diffie-Hellman a des zéros non corrigés, les ordinateurs non corrigés peuvent calculer incorrectement le mac en ne prenant pas en compte les zéros remplis. Ce problème est généralement rencontré lors de l’interaction avec des implémentations de chiffrement non basées sur Windows et peut entraîner des échecs de négociation intermittents.

Les messages d’erreur sont retournés lorsque la négociation TLS sécurisée est négociée entre le client et le serveur à l’aide de TLS_DHE suite de chiffrement. L’utilisation de l’une des suites de chiffrement affectées peut être identifiée dans le paquet « Server Hello ». Pour plus d’informations, consultez l’extrait de code réseau dans la section « Plus d’informations ».

Résolution

Pour résoudre ce problème, assurez-vous que le client et le serveur impliqués dans une connexion exécutent Windows sur lequel les correctifs de TLS_DHE sont installés. Il est recommandé d’installer les mises à jour, car elles améliorent la conformité aux spécifications TLS_DHE.

La liste suivante répertorie la version du système d’exploitation en fonction des mises à jour installées.

Versions de Windows qui contiennent les zéros correctifs de début pour TLS_DHE

  • Windows Server 2016, version 1607
    • 4537806 de la base de connaissances : 25 février 2020-KB4537806 (build du système d’exploitation 14393.3542)
    • Kb 4540670 : 10 mars 2020-KB4540670 (build du système d’exploitation 14393.3564)
    • Mises à jour qui remplacent KB4537806 et KB4540670 pour les versions de système d’exploitation respectives
  • Windows Server 2019 RTM et versions ultérieures.
  • Windows 10, version 1511 et versions ultérieures de Windows 10 (voir l’historique des versions)

Versions de Windows qui ne contiennent pas les correctifs zéro non significatifs pour TLS_DHE

  • Windows Server 2016, les serveurs de la version 1607 qui n’ont pas les correctifs kb 4537806 et kb 4540670 appliqués.
  • Windows 10, version 1507
  • Windows 8.1
  • Windows 7
  • Windows Server 2012 R2 et versions antérieures de Windows Server

Solution de contournement

Si vous ne pouvez pas mettre à jour Windows, comme solution de contournement, vous pouvez désactiver les chiffrements TLS_DHE à l’aide de l’une des deux méthodes.

Utilisation de la stratégie de groupe

Les chiffrements TLS_DHE_* peuvent être désactivés à l’aide de stratégie de groupe. Reportez-vous à Hiérarchisation des suites de chiffrement Schannel pour configurer la stratégie de groupe « Ordre de suite de chiffrement SSL ».

URL de stratégie : Configuration ordinateur -> Modèles d’administration -> Réseau -> Paramètres de configuration SSL
Paramètre de stratégie : paramètre d’ordre de suite de chiffrement SSL.

Utilisation d’un script PowerShell

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

Plus d’informations

Vous pouvez confirmer que vous rencontrez ce problème lors de l’établissement de la connexion. Lorsque le problème se produit, vous pouvez voir la séquence suivante dans la trace réseau sur le serveur.

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  

Examen du paquet Server Hello pour voir la suite de chiffrement utilisée :

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

Référence

Si vous souhaitez en savoir plus, consultez les articles suivants :