Partilhar via


Uma conexão existente foi fechada à força pelo host remoto (erro do sistema operacional 10054)

Aplica-se ao: SQL Server

Observação

Antes de começar a solucionar problemas, recomendamos que você verifique os pré-requisitos e acesse a lista de verificação.

Este artigo detalha vários cenários e fornece resoluções para os seguintes erros:

  • Uma conexão foi estabelecida com êxito com o servidor, 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 foi estabelecida com êxito com o servidor, mas ocorreu um erro durante o aperto de mão pré-logon. (provedor: Provedor TCP, erro: 0 – Uma conexão existente foi fechada à força pelo host remoto.)

O erro do sistema operacional 10054 é gerado na camada de soquetes do Windows. Para obter mais informações, confira Códigos de Erro do Windows Sockets: WSAECONNRESET 10054.

Quando você vê o erro?

O Canal Seguro, também conhecido como Schannel, é um SSP (Provedor de Suporte à Segurança ). Ele contém um conjunto de protocolos de segurança que fornecem autenticação de identidade e protegem a comunicação privada por meio da criptografia. Uma função do SSP do Schannel é implementar diferentes versões do protocolo TLS (Transport Layer Security). Esse protocolo é um padrão do setor projetado para proteger a privacidade das informações comunicadas pela Internet.

O Protocolo TLS Handshake é responsável pela troca de chaves necessária para estabelecer ou retomar sessões seguras entre dois aplicativos que se comunicam por TCP. Durante a fase de pré-logon do processo de conexão, SQL Server e aplicativos cliente usam o protocolo TLS para estabelecer um canal seguro para transmitir credenciais.

Os seguintes cenários detalham erros que ocorrem quando o aperto de mão não pode ser concluído:

Cenário 1: não existem protocolos TLS correspondentes entre o cliente e o servidor

SSL (Secure Socket Layer) e versões do TLS anteriores ao TLS 1.2 têm várias vulnerabilidades conhecidas. Você é incentivado a atualizar para o TLS 1.2 e desabilitar versões anteriores sempre que possível. Assim, os administradores do sistema podem enviar atualizações por meio da política de grupo ou outros mecanismos para desabilitar essas versões inseguras do TLS em vários computadores em seu ambiente.

Erros de conectividade ocorrem quando seu aplicativo usa uma versão anterior do driver ODBC (Open Database Connectivity), provedor OLE DB, componentes da estrutura do .NET ou uma versão SQL Server que não dá suporte ao TLS 1.2. O problema ocorre porque o servidor e o cliente não conseguem encontrar um protocolo correspondente (como TLS 1.0 ou TLS 1.1). Um protocolo correspondente é necessário para concluir o aperto de mão TLS necessário para prosseguir com a conexão.

Solução

Para resolver esse problema, use um dos seguintes métodos:

  • Atualize seu SQL Server ou seus provedores cliente para uma versão compatível com o TLS 1.2. Para obter mais informações, confira Suporte do TLS 1.2 para Microsoft SQL Server.
  • Peça aos administradores do sistema que habilitem temporariamente o TLS 1.0 ou o TLS 1.1 no cliente e nos computadores do servidor executando uma das seguintes ações:

Cenário 2: Protocolos TLS correspondentes no cliente e no servidor, mas sem pacotes de criptografia TLS correspondentes

Esse cenário ocorre quando você ou o administrador restringiram determinados algoritmos no cliente ou no servidor para obter segurança extra.

As versões TLS do cliente e do servidor, os pacotes de criptografia podem ser facilmente examinados nos pacotes Hello cliente e servidor Hello em um rastreamento de rede. O pacote client Hello anuncia todos os pacotes de criptografia do cliente, enquanto o pacote server Hello especifica um deles. Se não houver pacotes correspondentes, o servidor fechará a conexão em vez de responder ao pacote server Hello.

Solução

Para marcar o problema, siga estas etapas:

  1. Se um rastreamento de rede não estiver disponível, marcar o valor das funções sob esta chave do registro:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002

    Use o seguinte comando do PowerShell para localizar as funções TLS.

    Get-ItemPropertyValue  -Path HKLM:\System\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002\ -Name Functions
    
  2. Use a guia Ciphers Suites na ferramenta De criptografia do IIS para marcar se há algoritmos correspondentes. Se nenhum algoritmo correspondente for encontrado, entre em contato com Suporte da Microsoft.

Para obter mais informações, confira Conexões TLS 1.2 Upgrade Workflow and Transport Layer Security (TLS) podem falhar ou tempo limite ao conectar ou tentar uma retomada.

Cenário 3: as cifras de TLS_DHE podem estar habilitadas

Esse problema ocorre quando o cliente ou servidor está hospedado nas versões windows 2012, 2016 e superiores. Apesar de ambas as versões do sistema operacional possuírem a mesma cifra (TLS_DHE*), o Windows 2012 e 2016+ manipulam chaves de criptografia no TLS de forma diferente. Isso pode resultar em erros de comunicação.

Solução

Para resolve esse problema, remova todas as cifras começando com "TLS_DHE*" da política local. Para obter mais informações sobre erros que ocorrem quando os aplicativos tentam se conectar a SQL Server no Windows, consulte Aplicativos experimentam erros de conexão TLS fechados à força ao conectar SQL Servers no Windows.

Cenário 4: SQL Server usa um certificado assinado por um algoritmo de hash fraco, como MD5, SHA224 ou SHA512

SQL Server sempre criptografa pacotes de rede relacionados à entrada. Para essa finalidade, ele usa um certificado provisionado manualmente ou um certificado autoassinado. Se SQL Server encontrar um certificado que dê suporte à função de autenticação do servidor no repositório de certificados, ele usará o certificado. SQL Server usa esse certificado mesmo que não tenha sido provisionado manualmente. Se esses certificados usarem um algoritmo de hash fraco (algoritmo de impressão digital), como MD5, SHA224 ou SHA512, eles não funcionarão com o TLS 1.2 e causarão o erro mencionado anteriormente.

Observação

Certificados autoassinados não são afetados por esse problema.

Resolução

Para resolver este problema, siga estas etapas:

  1. Em SQL Server Configuration Manager, expanda SQL Server Configuração de Rede no painel Console.
  2. Selecione Protocolos para o <nome> da instância.
  3. Selecione a guia Certificado e siga a etapa relevante:
    • Se um certificado for exibido, selecione Exibir para examinar o algoritmo Thumbprint para confirmar se ele está usando um algoritmo de hash fraco. Em seguida, selecione Limpar e vá para a etapa 4.
    • Se um certificado não for exibido, examine o log de erros SQL Server para uma entrada que se assemelha ao seguinte e observe o valor de hash ou impressão digital:
      2017-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption
  4. Use as seguintes etapas para remover a autenticação do servidor:
    1. Selecione Iniciar>Execução e digite MMC. (MMC também conhecido como Console de Gerenciamento da Microsoft.)
    2. No MMC, abra os certificados e selecione Conta de Computador na tela snap-in Certificados .
    3. ExpandaCertificadosPessoais>.
    4. Localize o certificado que SQL Server está usando pelo nome ou examinando o valor da impressão digital de certificados diferentes no repositório de certificados e abra seu painel Propriedades.
    5. Na guia Geral , selecione Habilitar apenas as seguintes finalidades e desselecionar a Autenticação do Servidor.
  5. Reinicie o serviço SQL Server.

Cenário 5: O cliente e o servidor estão usando TLS_DHE pacote de criptografia para o aperto de mão TLS, mas um dos sistemas não tem correções zero principais para o TLS_DHE instalado

Para obter mais informações sobre esse cenário, confira Aplicativos experimentam erros de conexão TLS fechados à força ao conectar SQL Servers no Windows.

Observação

Se este artigo não tiver resolvido seu problema, você poderá marcar se os artigos de problemas comuns de conectividade puderem ajudar.

Cenário 6: TCP Three-Way Tempo limite de aperto de mão (SYN Fail, Rejeição do TCP) devido à escassez de trabalhadores do IOCP

Em sistemas com altas cargas de trabalho em SQL Server 2017 e anteriores, você pode observar um erro intermitente de 10054 causado por falhas de aperto de mão de três vias TCP, levando a rejeições de TCP. A causa raiz desse problema pode estar no atraso no processamento de TCPAcceptEx solicitações. Esse atraso pode ser devido à escassez de ouvintes do IOCP (Porta de Conclusão de Entrada/Saída) responsáveis por gerenciar a aceitação de conexões de entrada. O número insuficiente de trabalhadores do IOCP e o serviço ocupado de outras solicitações leva ao processamento atrasado de solicitações de conexão, resultando em falhas de aperto de mão e rejeições TCP. Você também pode observar tempos limite de logon durante o aperto de mão SSL inicial (se houver) ou o processamento de solicitações de logon, que envolvem em verificações de autenticação.

Solução

A escassez de trabalhadores do IOCP e recursos do SOS Worker alocados para lidar com operações de autenticação e criptografia é a main causa dos tempos limite de aperto de mão de três vias do TCP e tempo limite de logon adicional. SQL Server 2019 inclui várias melhorias de desempenho nessa área. Um aprimoramento notável é a implementação de um pool de despachantes de logon dedicado. Isso otimiza a alocação de recursos para tarefas relacionadas ao logon, o que reduz a ocorrência de tempo limite e melhora o desempenho geral do sistema.

Outros cenários em que as conexões TLS falham

Se a mensagem de erro encontrada não corresponder a nenhum dos cenários anteriores, consulte os seguintes cenários adicionais:

Confira também

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.