El host remoto cerró forzadamente una conexión existente (error del sistema operativo 10054)
Se aplica a: SQL Server
Nota:
Antes de empezar a solucionar problemas, se recomienda comprobar los requisitos previos y seguir la lista de comprobación.
En este artículo se detallan varios escenarios y se proporcionan soluciones para los errores siguientes:
-
Se estableció correctamente una conexión con el servidor, pero luego se produjo un error durante el proceso de inicio de sesión. (proveedor: proveedor SSL, error: 0: la conexión existente se cerró forzadamente por el host remoto).
-
Se ha establecido correctamente la conexión con el servidor, pero se ha producido un error durante el protocolo de enlace previo al inicio de sesión. (proveedor: proveedor TCP, error: 0: la conexión existente se cerró forzadamente por el host remoto).
El error 10054 del sistema operativo se genera en la capa de Windows Sockets. Para obtener más información, vea Códigos de error de Windows Sockets: WSAECONNRESET 10054.
¿Cuándo ve el error?
Canal seguro, también conocido como Schannel, es un proveedor de soporte técnico de seguridad (SSP). Contiene un conjunto de protocolos de seguridad que proporcionan autenticación de identidad y comunicación privada segura a través del cifrado. Una función de Schannel SSP es implementar diferentes versiones del protocolo de seguridad de la capa de transporte (TLS). Este protocolo es un estándar del sector diseñado para proteger la privacidad de la información que se comunica a través de Internet.
El protocolo de protocolo de enlace TLS es responsable del intercambio de claves necesario para establecer o reanudar sesiones seguras entre dos aplicaciones que se comunican a través de TCP. Durante la fase previa al inicio de sesión del proceso de conexión, SQL Server y las aplicaciones cliente usan el protocolo TLS para establecer un canal seguro para transmitir las credenciales.
En los escenarios siguientes se detallan los errores que se producen cuando no se puede completar el protocolo de enlace:
Escenario 1: No existen protocolos TLS coincidentes entre el cliente y el servidor
La capa de socket seguro (SSL) y las versiones de TLS anteriores a TLS 1.2 tienen varias vulnerabilidades conocidas. Se recomienda actualizar a TLS 1.2 y deshabilitar las versiones anteriores siempre que sea posible. En consecuencia, los administradores del sistema podrían insertar actualizaciones a través de la directiva de grupo u otros mecanismos para deshabilitar estas versiones tls no seguras en varios equipos del entorno.
Los errores de conectividad se producen cuando la aplicación usa una versión anterior del controlador Open Database Connectivity (ODBC), el proveedor OLE DB, los componentes de .NET Framework o una versión de SQL Server que no admite TLS 1.2. El problema se produce porque el servidor y el cliente no pueden encontrar un protocolo coincidente (como TLS 1.0 o TLS 1.1). Se necesita un protocolo coincidente para completar el protocolo de enlace TLS necesario para continuar con la conexión.
Solución
Para solucionar este problema, use uno de los métodos siguientes:
- Actualice sql Server o los proveedores de cliente a una versión que admita TLS 1.2. Para más información, consulte Compatibilidad de TLS 1.2 con Microsoft SQL Server.
- Pida a los administradores del sistema que habiliten temporalmente TLS 1.0 o TLS 1.1 en los equipos cliente y servidor mediante una de las siguientes acciones:
- Use la pestaña Conjuntos de cifrado de la herramienta crypto de IIS para validar y realizar cambios en la configuración de TLS actual.
- Inicie el Editor del Registro y busque las claves del Registro específicas de Schannel:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
. Para más información, consulte Flujo de trabajo de actualización de TLS 1.2 y Errores de SSL después de actualizar a TLS 1.2.
Escenario 2: Coincidencia de protocolos TLS en el cliente y el servidor, pero no conjuntos de cifrado TLS coincidentes
Este escenario se produce cuando usted o el administrador restringen determinados algoritmos en el cliente o el servidor para mayor seguridad.
Las versiones tls de cliente y servidor, los conjuntos de cifrado se pueden examinar fácilmente en los paquetes Hello y Server Hello de cliente en un seguimiento de red. El paquete Client Hello anuncia todos los conjuntos de cifrado de cliente, mientras que el paquete Hello del servidor especifica uno de ellos. Si no hay conjuntos coincidentes, el servidor cierra la conexión en lugar de responder al paquete Hello del servidor.
Solución
Para comprobar el problema, siga estos pasos:
Si un seguimiento de red no está disponible, compruebe el valor de las funciones en esta clave del Registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
Use el siguiente comando de PowerShell para buscar las funciones TLS.
Get-ItemPropertyValue -Path HKLM:\System\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002\ -Name Functions
Use la pestaña Conjuntos de cifrado de la herramienta crypto de IIS para comprobar si hay algoritmos coincidentes. Si no se encuentra ningún algoritmo coincidente, póngase en contacto con Soporte técnico de Microsoft.
Para obtener más información, consulte El flujo de trabajo de actualización de TLS 1.2 y las conexiones de seguridad de la capa de transporte (TLS) pueden producir un error o un tiempo de espera al conectarse o intentar una reanudación.
Escenario 3: Los cifrados de TLS_DHE podrían estar habilitados
Este problema se produce cuando el cliente o servidor se hospeda en Windows 2012, 2016 y versiones posteriores. A pesar de ambas versiones del sistema operativo que poseen el mismo cifrado (TLS_DHE*), Windows 2012 y 2016+ controlan las claves de criptografía dentro de TLS de forma diferente. Esto puede dar lugar a errores de comunicación.
Solución
Para resolver este problema, quite todos los cifrados a partir de "TLS_DHE*" de la directiva local. Para obtener más información sobre los errores que se producen cuando las aplicaciones intentan conectarse a SQL Server en Windows, consulte Experiencia de aplicaciones con errores de conexión TLS cerrados forzadamente al conectar servidores SQL Server en Windows.
Escenario 4: SQL Server usa un certificado firmado por un algoritmo hash débil, como MD5, SHA224 o SHA512
SQL Server siempre cifra los paquetes de red relacionados con el inicio de sesión. Para ello, usa un certificado aprovisionado manualmente o un certificado autofirmado. Si SQL Server encuentra un certificado que admite la función de autenticación del servidor en el almacén de certificados, usa el certificado. SQL Server usa este certificado aunque no se haya aprovisionado manualmente. Si estos certificados usan un algoritmo hash débil (algoritmo de huella digital), como MD5, SHA224 o SHA512, no funcionarán con TLS 1.2 y provocarán el error mencionado anteriormente.
Nota:
Los certificados autofirmados no se ven afectados por este problema.
Solución
Para resolver el problema, siga estos pasos:
- En Administrador de configuración de SQL Server, expanda Configuración de red de SQL Server en el panel Consola.
- Seleccione Protocolos para el <nombre> de instancia.
- Seleccione la pestaña Certificado y siga el paso pertinente:
- Si se muestra un certificado, seleccione Ver para examinar el algoritmo de huella digital para confirmar si usa un algoritmo hash débil. A continuación, seleccione Borrar y vaya al paso 4.
- Si no se muestra un certificado, revise el registro de errores de SQL Server para obtener una entrada similar a la siguiente y anote el valor hash o huella digital:
2017-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption
- Siga estos pasos para quitar la autenticación del servidor:
- Seleccione Inicio>Ejecutar y escriba MMC. (MMC también conocido como Microsoft Management Console).
- En MMC, abra los certificados y seleccione Cuenta de equipo en la pantalla del complemento Certificados .
- Expanda Personal>Certificados.
- Busque el certificado que USA SQL Server por su nombre o examinando el valor de huella digital de diferentes certificados en el almacén de certificados y abra su panel Propiedades .
- En la pestaña General, seleccione Habilitar solo los siguientes propósitos y anule la selección de Autenticación de servidor.
- Reinicie el servicio SQL Server.
Escenario 5: El cliente y el servidor usan TLS_DHE conjunto de cifrado para el protocolo de enlace TLS, pero uno de los sistemas no tiene correcciones iniciales para el TLS_DHE instalado
Para más información acerca de este escenario, consulte Las aplicaciones experimentan errores de cierre forzado de la conexión TLS al conectar servidores SQL Server en Windows.
Nota:
Si este artículo no ha resuelto el problema, puede comprobar si los artículos de problemas de conectividad comunes pueden ayudar.
Escenario 6: Tiempo de espera del protocolo de enlace triple TCP (error de SYN, rechazo tcp) debido a la escasez de trabajadores de IOCP
En sistemas con cargas de trabajo elevadas en SQL Server 2017 y versiones anteriores, es posible que observe un error intermitente de 10054 causado por errores de protocolo de enlace bidireccionales tcp, lo que provoca rechazos TCP. La causa principal de este problema podría estar en el retraso en el procesamiento TCPAcceptEx
de solicitudes. Este retraso puede deberse a una escasez de trabajadores de escucha del agente de escucha ioCP (puerto de finalización de entrada/salida) responsable de administrar la aceptación de las conexiones entrantes. El número insuficiente de trabajos de IOCP y el mantenimiento ocupado de otras solicitudes conduce al procesamiento retrasado de las solicitudes de conexión, lo que en última instancia da lugar a errores de protocolo de enlace y rechazos TCP. También puede observar los tiempos de espera de inicio de sesión durante el protocolo de enlace SSL de inicio (si existe) o el procesamiento de solicitudes de inicio de sesión, que implican en las comprobaciones de autenticación.
Solución
Una escasez de trabajadores de IOCP y recursos de trabajo de SOS asignados para controlar las operaciones de autenticación y cifrado es la principal causa de los tiempos de espera de protocolo de enlace tcp triple y tiempos de espera de inicio de sesión adicionales. SQL Server 2019 incluye varias mejoras de rendimiento en esta área. Una mejora notable es la implementación de un grupo de distribuidores de inicio de sesión dedicado. Esto optimiza la asignación de recursos para las tareas relacionadas con el inicio de sesión, lo que reduce la aparición de tiempos de espera y mejora el rendimiento general del sistema.
Otros escenarios en los que se produce un error en las conexiones TLS
Si el mensaje de error que encuentra no corresponde a ninguno de los escenarios anteriores, consulte los siguientes escenarios adicionales:
- SQL Server local no se puede conectar a un servidor vinculado cuando se usa el cifrado RSA
- Es posible que se produzca un error de conexión 10054 después de la actualización de SQL Server.
- Se producen errores de conexión intermitentes al agregar un nodo al entorno AlwaysOn en SQL Server
- Se producen errores de conexión intermitentes al usar la utilidad SQLCMD
- El error SSL_PE_NO_CIPHER se produce en el punto de conexión 5022 en SQL Server.
- El error de conectividad 0x80004005 se produce a partir de errores de SSIS del Agente SQL Sever
- Error "El cliente no puede establecer la conexión" después de implementar las directivas del conjunto de cifrado en un equipo con SQL Server
- Error "Error de conexión con el servidor vinculado" después de actualizar Windows Server
- Agente SQL Server no se puede iniciar al conectarse a SQL Server
- Error al conectar una versión superior a la versión inferior de SQL Server mediante la funcionalidad de SQL Server Linked Server
Consulte también
Aviso de declinación de responsabilidades sobre la información de terceros
Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.