Cifrado y validación de certificados en Microsoft.Data.SqlClient

Descargar ADO.NET

SQL Server cifra siempre los paquetes de red asociados al inicio de sesión. Si no se ha aprovisionado ningún certificado en el servidor al iniciarlo, SQL Server genera un certificado autofirmado, que se usa para cifrar los paquetes de inicio de sesión.

A nivel general, el cifrado entre un cliente y un servidor garantiza que el cliente y el servidor sean los únicos que puedan leer los datos. Una parte importante del proceso de cifrado es la validación de certificados de servidor. La validación de certificados de servidor permite al cliente asegurarse de que el servidor es quien dice ser. El certificado se valida para elementos como la expiración, la cadena de confianza y que el nombre del certificado coincide con el nombre del servidor al que se conecta el cliente. Para más información, consulte Seguridad de la capa de transporte y certificados digitales.

Se recomienda encarecidamente aprovisionar un certificado comprobable en SQL Server para la conectividad segura. La seguridad de la capa de transporte (TLS) solo se puede proteger con la validación de certificados.

Las aplicaciones pueden solicitar también el cifrado de todo el tráfico de red mediante la palabra clave de cadena de conexión o propiedad de conexión Encrypt. De forma predeterminada, para el cifrado de todo el tráfico de red de una conexión es necesario aprovisionar un certificado en el servidor. Al configurar el cliente para que confíe en el certificado del servidor, podría ser vulnerable a ataques de tipo "Man in the middle". Si implementa un certificado verificable en el servidor, asegúrese de que la configuración de Encrypt del cliente sea True y que la configuración de Trust Server Certificate sea False.

Para permitir usar el cifrado cuando no se ha aprovisionado un certificado en el servidor, se puede usar la configuración de cliente Encrypt y Trust Server Certificate. En este caso, el cifrado usa un certificado de servidor autofirmado sin validación por parte del cliente. Esta configuración cifra la conexión, pero no impide que los dispositivos entre el cliente y el servidor intercepten la conexión y redirijan el cifrado mediante proxy.

Cambios en el cifrado y comportamiento de la validación de certificados

La versión 4.0 de Microsoft.Data.SqlClient presenta cambios importantes en la configuración de cifrado. El valor predeterminado de Encrypt ahora es True.

La versión 2.0 de Microsoft.Data.SqlClient presenta cambios importantes en el comportamiento de la opción Trust Server Certificate. Anteriormente, si Encrypt se establecía en False, el certificado de servidor no se validaba, independientemente de la opción Trust Server Certificate. Ahora, el certificado de servidor se valida en función de la opción Trust Server Certificate si el servidor fuerza el cifrado, incluso si Encrypt está establecido en False.

Versión 4.0

En la tabla siguiente se describe el resultado del cifrado y la validación para la configuración de cifrado y certificado:

Configuración de cliente Encrypt Configuración de cliente Trust Server Certificate Configuración de servidor Force encryption Resultado
False False (valor predeterminado) No El cifrado solo se produce para los paquetes LOGIN. El certificado no se valida.
False False (valor predeterminado) (Cambio de comportamiento de la versión 1.0 a la 2.0) El cifrado de todo el tráfico de red solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
False True Se produce el cifrado de todo el tráfico de red y el certificado no se valida.
True (nuevo valor predeterminado) False (valor predeterminado) N/D El cifrado de todo el tráfico de red solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
True (nuevo valor predeterminado) True N/D Se produce el cifrado de todo el tráfico de red pero el certificado no se valida.
Strict (agregado en la versión 5.0) N/D N/D El cifrado de todo el tráfico de red solamente se produce mediante TDS 8 si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.

Precaución

En la tabla anterior solo se proporciona una guía sobre el comportamiento del sistema en distintas configuraciones. Para lograr una conectividad segura, asegúrese de que tanto el cliente como el servidor requieren cifrado. Asegúrese también de que el servidor tiene un certificado comprobable y de que el valor TrustServerCertificate en el cliente esté establecido en False.

A partir de la versión 5.0 de Microsoft.Data.SqlClient, HostNameInCertificate es una nueva opción de conexión. La validación de certificados de servidor garantiza que el nombre común (CN) o el nombre alternativo de sujeto (SAN) del certificado coincida con el nombre del servidor al que se está conectando. En algunos casos, como los alias DNS, es posible que el nombre del servidor no coincida con el CN o SAN. El valor HostNameInCertificate se puede usar para especificar un CN o SAN esperado diferente en el certificado de servidor.

Versión 2.0

A partir de la versión 2.0, cuando el servidor fuerza el cifrado, el cliente valida el certificado de servidor en función de la opción Trust Server Certificate, independientemente de la opción Encrypt.

En la tabla siguiente se describe el resultado del cifrado y la validación para la configuración de cifrado y certificado:

Configuración de cliente Encrypt Configuración de cliente Trust Server Certificate Configuración de servidor Force encryption Resultado
False (valor predeterminado) False (valor predeterminado) No El cifrado solo se produce para los paquetes LOGIN. El certificado no se valida.
False (valor predeterminado) False (valor predeterminado) (Cambio de comportamiento) El cifrado de todo el tráfico de red solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
False (valor predeterminado) True Se produce el cifrado de todo el tráfico de red y el certificado no se valida.
True False (valor predeterminado) N/D El cifrado de todo el tráfico de red solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
True True N/D Se produce el cifrado de todo el tráfico de red pero el certificado no se valida.

Precaución

En la tabla anterior solo se proporciona una guía sobre el comportamiento del sistema en distintas configuraciones. Para lograr una conectividad segura, asegúrese de que tanto el cliente como el servidor requieren cifrado. Asegúrese también de que el servidor tiene un certificado comprobable y de que el valor TrustServerCertificate en el cliente esté establecido en False.

Versión 1.0

En la tabla siguiente se describe el resultado del cifrado y la validación para la configuración de cifrado y certificado:

Configuración de cliente Encrypt Configuración de cliente Trust Server Certificate Configuración de servidor Force encryption Resultado
False (valor predeterminado) False (valor predeterminado) No El cifrado solo se produce para los paquetes LOGIN. El certificado no se valida.
False (valor predeterminado) False (valor predeterminado) Se produce el cifrado de todo el tráfico de red pero el certificado no se valida.
False (valor predeterminado) True Se produce el cifrado de todo el tráfico de red y el certificado no se valida.
True False (valor predeterminado) N/D El cifrado de todo el tráfico de red solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
True True N/D Se produce el cifrado de todo el tráfico de red pero el certificado no se valida.

Vea también

Cadenas de conexión
Sintaxis de la cadena de conexión