Error "El certificado recibido del servidor remoto fue emitido por una entidad de certificación que no es de confianza" al conectarse a SQL Server.

Versión del producto original: SQL Server
Número de KB original: 2007728

Resumen

Este artículo le ayuda a resolver el error "El certificado recibido del servidor remoto fue emitido por una entidad de certificación que no es de confianza" que se produce cuando un cliente realiza una conexión cifrada (TLS) a SQL Server. El error significa que el cliente no puede validar el certificado que la instancia de SQL Server presenta durante el protocolo de enlace TLS, normalmente porque la entidad de certificación emisora (CA) no está en el almacén de entidades de certificación raíz de confianza del cliente o porque SQL Server usa un certificado autofirmado.

Para resolver el error, instale el certificado de entidad de certificación emisora en el equipo cliente, confiando en el certificado de servidor sin validación (la opción Certificado de servidor de confianza ) o cambiando la configuración de cifrado en el cliente o el servidor. Las versiones recientes de varios controladores y herramientas de cliente cambiaron sus valores predeterminados para requerir cifrado, por lo que es posible que vea este error después de una actualización de controlador o herramienta aunque no haya cambiado nada en el servidor.

Síntomas

Al conectarse a SQL Server, es posible que reciba el siguiente mensaje de error:

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 cadena de certificación fue emitida por una entidad que no es de confianza). (Proveedor de datos SqlClient de .NET)

Además, se registra el siguiente mensaje de error en el registro de eventos Windows System:

Log Name:      System  
Source:        Schannel  
Date:          10/13/2020 3:03:31 PM  
Event ID:      36882  
Task Category: None  
Level:         Error  
Keywords:  
User:        USERNAME  
Computer:     COMPUTERNAME  
Description:  
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.

Causa

Este error se produce cuando se realiza una conexión cifrada a SQL Server mediante un certificado que el cliente no puede comprobar. Este comportamiento se produce en los siguientes escenarios:

Escenario Cifrado del servidor Cifrado del lado del cliente Tipo de certificado Entidad emisora de certificados presente en el almacén de Entidades de certificación raíz de confianza
1 No Certificado de un origen en el que el cliente no confía (la entidad emisora no aparece en Entidades de certificación raíz de confianza en el equipo cliente). No
2 No Un certificado autofirmado que SQL Server genera No. Los certificados autofirmados no aparecen en este almacén.

Cuando un cliente establece una conexión cifrada a SQL Server, El canal seguro (Schannel) compila la lista de entidades de certificación de confianza mediante la búsqueda en el almacén de entidades de certificación raíz de confianza en el equipo local. Durante el protocolo de enlace TLS, el servidor envía su certificado de clave pública al cliente. El emisor de un certificado de clave pública se conoce como entidad de certificación (CA). El cliente debe confirmar que confía en la ENTIDAD de certificación, lo que hace sabiendo las claves públicas de las CA de confianza de antemano. Cuando Schannel detecta un certificado emitido por una entidad de certificación que no es de confianza, como en los dos escenarios anteriores, obtendrá el mensaje de error que aparece en la sección Síntomas .

Si no se configura o detecta ningún certificado adecuado, el Motor de base de datos genera un certificado autofirmado de respaldo durante el arranque. Usa este certificado para cifrar las credenciales de inicio de sesión y, cuando está habilitado el cifrado del lado servidor o del lado cliente, toda la conexión. Ningún cliente confía en un certificado autofirmado de forma predeterminada, por lo que este error puede producirse en una instalación predeterminada de SQL Server, incluso cuando el cliente y el servidor se ejecutan en el mismo equipo. Para obtener más información, consulte Cifrado de paquetes de inicio de sesión frente al cifrado de paquetes de datos.

¿Por qué este error aparece después de una actualización de controlador o herramienta?

Las versiones de herramientas y controladores de cliente de la tabla siguiente cambiaron sus valores predeterminados para requerir cifrado. Después de actualizar a una de estas versiones, el cliente cifra la conexión y valida el certificado de servidor aunque la configuración del servidor no haya cambiado. Las versiones anteriores no requerían cifrado de forma predeterminada, por lo que el certificado no se validó a menos que se solicitara explícitamente el cifrado.

Controlador o herramienta de cliente Versión Comportamiento de cifrado predeterminado
Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL19) 19 y versiones posteriores Encrypt el valor predeterminado es Mandatory
Controlador ODBC de Microsoft para SQL Server 18 y versiones posteriores Encrypt el valor predeterminado es Mandatory
Microsoft.Data.SqlClient 4.0 y versiones posteriores Encrypt el valor predeterminado es True
SQL Server Management Studio (SSMS) 20 y versiones posteriores El cifrado está establecido por defecto en Obligatorio

Si aparece este error inmediatamente después de migrar una aplicación de SQL Server Native Client 11.0 (SNAC) a Microsoft OLE DB Driver 19 o Microsoft ODBC Driver 18, consulte La cadena de certificados no es de confianza después de la actualización del controlador.

SNAC no se incluye con SQL Server 2022 (16.x) ni con versiones posteriores ni con SSMS 19 ni versiones posteriores, y no se recomienda para el desarrollo nuevo. Use Microsoft OLE DB Driver for SQL Server, Microsoft ODBC Driver for SQL Server o Microsoft.Data.SqlClient en su lugar. Para obtener más información, consulte Directivas de soporte técnico para SQL Server Native Client.

Solución

Si usa intencionadamente un certificado de una entidad que no es de confianza o un certificado autofirmado para cifrar las conexiones a SQL Server, use una de las siguientes opciones:

Opción 1: Instalar la entidad de certificación en el equipo cliente

En el escenario 1, agregue la entidad de certificación al almacén de Entidades de certificación raíz de confianza en el equipo cliente desde el que se inicia la conexión cifrada. Para ello, complete el paso 1: Exportar el certificado de servidor a un archivo y paso 2: Instalar la entidad de certificación raíz (CA) en los procedimientos del equipo cliente en esa secuencia.

Paso 1: Exportar el certificado de servidor a un archivo

En el equipo SQL Server, exporte el certificado que SQL Server usa a un archivo. En los pasos siguientes se usa caCert.cer como nombre de archivo de ejemplo. Este archivo no existe hasta que lo cree en este procedimiento. Elija el nombre y la ubicación.

  1. Seleccione Inicio, escriba mmc y, a continuación, abra Microsoft Management Console.

  2. Seleccione Archivo>Agregar o quitar complementos.

  3. En la lista Complementos disponibles, seleccione Certificados y, a continuación, seleccione Agregar.

  4. Seleccione Cuenta de equipo, siguiente, equipo local: (el equipo en el que se ejecuta esta consola) y, a continuación, seleccione Finalizar.

    Nota:

    Los certificados de SQL Server se instalan en el almacén de certificados Equipo local\Personal. Si selecciona Mi cuenta de usuario, MMC abre otro almacén de certificados y el certificado de SQL Server no aparece.

  5. Seleccione Aceptar para cerrar el cuadro de diálogo Agregar o quitar complementos .

  6. En el panel izquierdo, expanda Certificados (equipo local), expanda Personal y, a continuación, seleccione Certificados.

  7. Haga clic con el botón derecho en el certificado que SQL Server usa y, a continuación, seleccione Exportar todas las tareas>.

    Sugerencia

    Para identificar el certificado que usa SQL Server, abra Administrador de configuración de SQL Server, expanda Configuración de red de SQL Server, haga clic con el botón derecho en Protocolos para <nombre de instancia>, seleccione Propiedades y, a continuación, seleccione la pestaña Certificado. Si el registro de errores de SQL Server contiene la entrada "Se cargó correctamente un certificado autogenerado para el cifrado", SQL Server usa un certificado de reserva generado automáticamente. No puede exportar ese certificado, por lo que use la opción 2 o la opción 3 en su lugar.

  8. Seleccione Siguiente para desplazarse más allá de la página principal del Asistente para exportación de certificados.

  9. Confirme que No, no exporte la clave privada seleccionada y, a continuación, seleccione Siguiente.

  10. Asegúrese de que esté seleccionada la opción X.509 codificado en DER (.CER) o X.509 codificado en Base64 (.CER) y, a continuación, seleccione Siguiente.

  11. Escriba un nombre de archivo de exportación, como caCert.cer.

  12. Seleccione Siguiente y, a continuación, seleccione Finalizar para exportar el certificado.

  13. Copie el archivo .cer exportado en el equipo cliente.

Paso 2: Instalar la entidad de certificación raíz (CA) en el equipo cliente

  1. En el equipo cliente, abra MMC, seleccione Archivo>Agregar o quitar complemento, seleccione Certificados en la lista Complementos disponibles y, a continuación, seleccione Agregar.

  2. En el cuadro de diálogo Complemento Certificados , seleccione Cuenta de equipo y, a continuación, seleccione Siguiente.

  3. En el panel Seleccionar equipo , seleccione Equipo local: (el equipo en el que se ejecuta esta consola) y, a continuación, seleccione Finalizar.

  4. Seleccione Aceptar para cerrar el cuadro de diálogo Agregar o quitar complementos .

  5. En el panel izquierdo de MMC, expanda el nodo Certificados (equipo local).

  6. Expanda el nodo Entidades de certificación raíz de confianza, haga clic con el botón derecho en la subcarpeta Certificados, seleccione Todas las tareas y, a continuación, seleccione Importar.

  7. En el Asistente para importación de certificados, en la página principal , seleccione Siguiente.

  8. En la página Archivo para importar , seleccione Examinar.

  9. Vaya a la ubicación del archivo de certificado caCert.cer , seleccione el archivo y, a continuación, seleccione Abrir.

  10. En la página Archivo que se va a importar , seleccione Siguiente.

  11. En la página Almacén de certificados, acepte la selección predeterminada y seleccione Siguiente.

  12. En la página Finalización del Asistente para importación de certificados, seleccione Finalizar.

Opción 2: Confiar en el certificado de servidor sin validarlo

En los escenarios 1 y 2, establezca la opción Certificado de servidor de confianza en la aplicación cliente. Esta configuración mantiene la conexión cifrada, pero omite la validación del certificado. El nombre de palabra clave y los valores aceptados dependen de la biblioteca cliente:

Biblioteca de cliente Palabra clave de cadena de conexión
Microsoft.Data.SqlClient TrustServerCertificate=True
Controlador ODBC de Microsoft para SQL Server TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (cadena del proveedor) TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (ADO o IDataInitialize) Trust Server Certificate=true
Microsoft JDBC Driver para SQL Server trustServerCertificate=true

Si se conecta mediante SQL Server Management Studio (SSMS) 20 o una versión posterior, seleccione la casilla Confiar en el certificado del servidor en la página Inicio de sesión del cuadro de diálogo Conectar al servidor. En versiones anteriores de SSMS, seleccione Opciones en la ventana Conectar con el servidor , seleccione la pestaña Propiedades de conexión y, a continuación, seleccione Confiar en el certificado de servidor.

Para obtener más información sobre cómo configurar esta configuración para la biblioteca cliente, consulte los artículos siguientes:

Nota:

La configuración De certificado de servidor de confianza no deshabilita el cifrado. La conexión permanece cifrada, pero el cliente no comprueba la identidad del servidor.

Caution

Las conexiones cifradas que usan un certificado autofirmado no proporcionan una seguridad segura. Son susceptibles de sufrir ataques de tipo "Man in the middle". No confíe en TLS con certificados autofirmados en un entorno de producción o en servidores conectados a Internet.

Opción 3: Cambiar la configuración de cifrado

Si la configuración que describen las secciones anteriores no está deseada, use una de las siguientes opciones para resolver este problema:

  • Configure el Motor de base de datos para usar un certificado de una entidad de confianza. Esta opción es la corrección a largo plazo más segura porque los clientes validan el certificado sin ninguna configuración adicional. Para obtener más información, consulte Habilitar conexiones cifradas al Motor de base de datos y Requisitos de certificado para SQL Server.

  • Si el cifrado no es necesario:

    • Desactive el cifrado en la aplicación cliente. Establezca Encrypt=Optional para una cadena de proveedor OLE DB, Use Encryption for Data=Optional para OLE DB ADO o IDataInitialize, Encrypt=no para ODBC y Encrypt=False para Microsoft.Data.SqlClient o el controlador JDBC de Microsoft. En SSMS 20 y versiones posteriores, establezca Cifrado en Opcional en la página Inicio de sesión del cuadro de diálogo Conectar con el servidor .

    • Desactive el cifrado del lado servidor mediante Administrador de configuración de SQL Server. Expanda SQL Server Configuración de red, haga clic con el botón derecho en Protocolos para el <nombre> de instancia, seleccione Propiedades, seleccione la pestaña Marcas, establezca Forzar cifrado en Noy, a continuación, reinicie el servicio SQL Server. Para obtener más información, consulte Protocolos de las propiedades de MSSQLSERVER (pestaña Indicadores).

      Warning

      Si desactiva el cifrado, las credenciales y los datos viajan a través de la red sin protección. Desactive el cifrado solo en redes aisladas y de confianza.