Compartir a través de


Uso del cifrado sin validación en SQL Server Native Client

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Importante

SQL Server Native Client (SNAC) no se incluye con:

  • SQL Server 2022 (16.x) y versiones posteriores
  • SQL Server Management Studio 19 y versiones posteriores

No se recomiendan SQL Server Native Client (SQLNCLI o SQLNCLI11) ni Microsoft OLE DB Provider for SQL Server (SQLOLEDB) heredado para el desarrollo de nuevas aplicaciones.

En el caso de los proyectos nuevos, use uno de los siguientes controladores:

Para SQLNCLI que se incluye como componente de motor de base de datos de SQL Server (versiones 2012 a 2019), consulte esta excepción de ciclo de vida de soporte técnico.

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

Los certificados autofirmados no garantizan la seguridad. El protocolo de enlace cifrado se basa en NT LAN Manager (NTLM). Debe aprovisionar un certificado verificable en SQL Server para una conectividad segura. La seguridad de la capa de transporte (TLS) solo se puede proteger con la validación de certificados.

Las aplicaciones también pueden solicitar el cifrado de todo el tráfico de red mediante palabras clave de cadena de conexión o propiedades de conexión. Las palabras clave son "Encrypt" para ODBC y OLE DB cuando se usa una cadena de proveedor con IDbInitialize::Initialize, o "Usar cifrado para datos" para ADO y OLE DB cuando se usa una cadena de inicialización con IDataInitialize. El Administrador de configuración de SQL Server también puede configurarlo mediante la opción Forzar cifrado de protocolo y configurando el cliente para solicitar conexiones cifradas. De forma predeterminada, el cifrado de todo el tráfico de red de una conexión requiere que se aprovisione un certificado en el servidor. Al establecer el cliente para que confíe en el certificado en el servidor, es vulnerable a ataques de tipo "man in the middle". Si implementa un certificado verificable en el servidor, asegúrese de cambiar la configuración del cliente sobre la confianza del certificado en FALSE.

Para obtener información sobre cadena de conexión palabras clave, vea Uso de palabras clave de cadena de conexión con SQL Server Native Client.

Para habilitar el cifrado que se va a usar cuando no se aprovisiona un certificado en el servidor, se puede usar el Administrador de configuración de SQL Server para establecer las opciones Forzar cifrado de protocolo y Certificado de servidor de confianza . En este caso, el cifrado usa un certificado de servidor autofirmado sin validación si no se aprovisionó ningún certificado verificable en el servidor.

Las aplicaciones también pueden usar la TrustServerCertificate palabra clave o su atributo de conexión asociado para garantizar que se produzca el cifrado. La configuración de la aplicación nunca reduce el nivel de seguridad establecido por el Administrador de configuración de cliente de SQL Server, pero podría reforzarlo. Por ejemplo, si forzar el cifrado de protocolo no está establecido para el cliente, una aplicación podría solicitar el cifrado en sí mismo. Para garantizar el cifrado incluso cuando no se aprovisiona un certificado de servidor, una aplicación podría solicitar cifrado y TrustServerCertificate. Pero si en la configuración cliente no está habilitado TrustServerCertificate, seguirá siendo necesario un certificado de servidor. En la tabla siguiente se describen todos los casos:

Cliente configurado con Forzar cifrado de protocolo Cliente configurado con Confiar en certificado de servidor Cadena/atributo de conexión Encrypt/Use Encryption for Data Cadena/atributo de conexión Trust Server Certificate Resultado
No N/D No (valor predeterminado) Omitido No se produce el cifrado.
No N/D No (valor predeterminado) El cifrado solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
No N/D El cifrado se produce siempre, pero es posible que se use un certificado de servidor autofirmado.
No Omitido Omitido El cifrado solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
No (valor predeterminado) Omitido El cifrado se produce siempre, pero es posible que se use un certificado de servidor autofirmado.
No (valor predeterminado) El cifrado solamente se produce si hay un certificado de servidor comprobable; de lo contrario, se produce un error en el intento de conexión.
El cifrado se produce siempre, pero es posible que se use un certificado de servidor autofirmado.

Precaución

En la tabla anterior solo se proporciona una guía sobre el comportamiento del sistema en distintas configuraciones. Para 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.

Proveedor OLE DB de SQL Server Native Client

El proveedor OLE DB de SQL Server Native Client admite el cifrado sin validación mediante la adición de la SSPROP_INIT_TRUST_SERVER_CERTIFICATE propiedad de inicialización del origen de datos, que se implementa en el DBPROPSET_SQLSERVERDBINIT conjunto de propiedades. Además, se agregó una nueva palabra clave de cadena de conexión, TrustServerCertificate, . Acepta yes o no valores; no es el valor predeterminado. Cuando se usan componentes de servicio, acepta true o false valores; false es el valor predeterminado.

Para obtener más información sobre las mejoras realizadas en el DBPROPSET_SQLSERVERDBINIT conjunto de propiedades, vea Propiedades de inicialización y autorización (proveedor OLE DB de Native Client).

Controlador ODBC de SQL Server Native Client

El controlador ODBC de SQL Server Native Client admite el cifrado sin validación mediante adiciones a las funciones SQLSetConnectAttr y SQLGetConnectAttr . SQL_COPT_SS_TRUST_SERVER_CERTIFICATE se agregó para aceptar o SQL_TRUST_SERVER_CERTIFICATE_YESSQL_TRUST_SERVER_CERTIFICATE_NO, con SQL_TRUST_SERVER_CERTIFICATE_NO el valor predeterminado. Además, se agregó una nueva palabra clave de cadena de conexión, TrustServerCertificate, . Acepta yes o no valores; no es el valor predeterminado.