Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo ajuda a corrigir um problema que ocorre quando um aplicativo tenta abrir uma conexão com um SQL Server.
Aplica-se a: Windows Server 2019, Windows Server 2016
Número de KB original: 4557473
Sintomas
Quando um aplicativo tenta abrir uma conexão com um SQL Server, uma das seguintes mensagens de erro é exibida:
Uma conexão com o servidor foi estabelecida com êxito, mas ocorreu um erro durante o processo de logon. (provedor: Provedor SSL, erro: 0 - Uma conexão existente foi fechada à força pelo host remoto.)
Uma conexão com o servidor foi estabelecida com êxito, mas ocorreu um erro durante o handshake de pré-logon. (provedor: Provedor TCP, erro: 0 - Uma conexão existente foi fechada à força pelo host remoto.)
Se você habilitou o log do SChannel no Servidor, receberá o ID do Evento 36888 (foi gerado um alerta fatal) quando o problema ocorrer.
Observação
- Dependendo do provedor ou driver que você está usando, a mensagem de erro pode variar um pouco.
- Esse problema também ocorre quando um aplicativo em execução no Windows Server 2012 R2 tenta se conectar ao SQL Server em execução no Windows Server 2019.
- Outros aplicativos cliente-servidor podem encontrar um problema semelhante.
Causa
O Windows 10, versão 1511 e versões posteriores do Windows, incluindo Windows Server 2016 ou Windows 10, versão 1607 que tem atualizações lançadas em 25 de fevereiro de 2020 ou atualizações posteriores instaladas, contém uma atualização zero à esquerda. Enquanto isso, todas as versões do Windows lançadas antes disso não contêm as principais zero atualizações.
O cliente e o servidor TLS precisam calcular as chaves exatamente da mesma maneira, caso contrário, elas obtêm resultados diferentes. As conexões TLS falham aleatoriamente se os zeros à esquerda forem calculados de forma diferente pelo cliente TLS e pelos servidores TLS.
Quando um grupo Diffie-Hellman troca de chaves tem zeros à esquerda, os computadores não corrigidos podem calcular incorretamente o MAC por não contabilizar os zeros preenchidos. Esse problema normalmente é visto ao interagir com implementações de criptografia não baseadas no Windows e pode causar falhas de negociação intermitentes.
As mensagens de erro são retornadas quando o handshake TLS seguro é negociado entre o cliente e o servidor usando TLS_DHE pacote de criptografia. O uso de um dos conjuntos de cifras afetados pode ser identificado no pacote "Server Hello". Para obter mais informações, consulte o snippet de rede na seção "Mais informações".
Solução
Para corrigir esse problema, verifique se o cliente e o servidor envolvidos em uma conexão estão executando o Windows que tem as principais correções zero para TLS_DHE instaladas. Recomenda-se instalar as atualizações, pois elas aumentam a conformidade com TLS_DHE especificações.
A seguir lista a versão do sistema operacional de acordo com as atualizações instaladas.
Versões do Windows que contêm as principais correções zero para TLS_DHE
- Windows Server 2016, versão 1607
- KB 4537806: 25 de fevereiro de 2020 a KB4537806 (Compilação 14393.3542 do SO)
- KB 4540670: 10 de março de 2020-KB4540670 (Compilação 14393.3564 do SO)
- Atualizações que substituem KB4537806 e KB4540670 para as respectivas versões do sistema operacional
- Windows Server 2019 RTM e versões posteriores.
- Windows 10, versão 1511 e versões posteriores do Windows 10 (consulte o histórico de versões)
Versões do Windows que não contêm as principais correções zero para TLS_DHE
- Os servidores Windows Server 2016, versão 1607 que não têm os patches KB 4537806 e KB 4540670 aplicados.
- Windows 10, versão 1507
- Windows 8.1
- Windows 7
- Windows Server 2012 R2 e versões anteriores do Windows Server
Solução alternativa
Se você não puder atualizar o Windows, como solução alternativa, poderá desabilitar as criptografias TLS_DHE usando um dos dois métodos.
Usar a Política de Grupo
As criptografias TLS_DHE_* podem ser desabilitadas usando a Diretiva de Grupo. Consulte Como priorizar o Schannel Cipher Suites para configurar a política de grupo "Ordem do Pacote de Criptografia SSL".
URL da política: Configuração do computador -> Modelos administrativos -> Rede -> Definições de configuração SSL
Configuração de política: Configuração de pedido do conjunto de cifras SSL.
Executa um script do 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
}
}
Mais informações
Você pode confirmar que está encontrando esse problema durante o estabelecimento da conexão. Quando o problema ocorre, você pode ver a sequência a seguir no rastreamento de rede no servidor.
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
Examinando o pacote Server Hello para ver o conjunto de criptografia que está sendo usado:
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
Referência
Para obter mais informações, consulte os seguintes artigos: