Configurar el cifrado de conexión SSL en MS SQL Server

Si utiliza redes públicas o que no son de confianza para conectar clientes o aplicaciones a su base de datos de Microsoft SQL Server, se recomienda utilizar el cifrado de tráfico. Veamos cómo configurar y habilitar el cifrado de tráfico SSL/TLS obligatorio para la conexión del cliente a Microsoft SQL Server.

En MS SQL 2016 y posteriores, se usa TLS en lugar de SSL.

Para habilitar el cifrado para una conexión de MS SQL Server, necesita un certificado TLS/SSL en su servidor. Puede ser un certificado comercial, un certificado emitido por su CA o un certificado autofirmado. Un certificado TLS debe cumplir con los siguientes requisitos:

  • Uso mejorado de claves: Server Authentication 1.3.6.1.5.5.7.3.1 ;
  • Fecha de vencimiento válida;
  • El certificado debe estar ubicado en el usuario (certmgr.msc) o computadora (certlm.msc) almacén de certificados;
  • El certificado debe tener el nombre del servidor en el que se ejecuta MSSQL en su nombre de sujeto;
  • Los clientes deben confiar en el certificado.

Puede crear un certificado autofirmado con PowerShell (se recomienda usar certificados autofirmados solo en entornos de prueba):

New-SelfSignedCertificate -DnsName srvdb01.woshub.com -CertStoreLocation cert:LocalMachineMy

Si va a acceder a su instancia de MSSQL no solo por el nombre de host, sino también por otros nombres (por ejemplo, si un agente de escucha de grupo de alta disponibilidad siempre activo con una base de datos de RDS Connection Broker está ubicado en el servidor), agregue todos los nombres disponibles al Nombre alternativo del sujeto. Para emitir un certificado autofirmado con múltiples SAN válido por tres años:

$curdate = Get-Date
$add3year = $curdate.AddYears(3)
$newcert=New-SelfSignedCertificate -DnsName srvdb01, srvdb01.woshub.loc,SQLRDDBCL.woshub.com -CertStoreLocation cert:LocalMachineMy -notafter $add3year

Importe el certificado a la lista de certificados de confianza:

$certFile = Export-Certificate -Cert $newcert -FilePath C:certname.cer
Import-Certificate -CertStoreLocation Cert:LocalMachineAuthRoot -FilePath $certFile.FullName

servidor sql servidor autenticación certificado ssl

Si utiliza un certificado de su CA o de una CA externa, impórtelo al almacén de certificados de la computadora (o al almacén de certificados de usuario si MS SQL Server se ejecuta con una cuenta administrada de usuario o gMSA). Si el servicio de SQL Server se ejecuta en una cuenta sin privilegios de administrador local, concédale privilegios de lectura para el certificado.

Luego vincule su certificado a la instancia de SQL Server instalada:

  1. ejecutar el Administrador de configuración de SQL Serverir Configuración de red del servidor SQLy abra las propiedades de Protocolos para MSSQLSERVER;
  2. Habilitar Forzar cifrado; forzar el cifrado ssl para las conexiones del servidor sql
  3. Ve a la Certificado y seleccione el certificado que importó al almacén de certificados de usuario o computadora en la lista desplegable; vincular certificado al servidor sql
  4. Reinicie MS SQL para aplicar los cambios.

Para obligar al cliente a usar siempre una conexión cifrada a su servidor MSSQL:

  • Abra el Administrador de configuración del servidor en el cliente -> Configuración de cliente nativo de SQL -> Propiedades -> habilitar Forzar el cifrado del protocolo. Forzar el cifrado de protocolo en SQL Server Native Client
  • También puede usar la siguiente cadena de conexión que hace que el cliente use SSL/TLS para conectarse al servidor MSSQL: Data Source=srvdb01.woshub.com;Integrated Security=False;User ID=test;Password=[Password];Encrypt=True

Los clientes deben confiar en el certificado utilizado para cifrar el tráfico. De lo contrario, aparecerá el siguiente error en la conexión:

Cannot connect to SRVDB01.
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) (Microsoft SQL Server, Error: -2146893019).

Puede agregar un certificado a la lista raíz de confianza en los equipos del dominio mediante GPO.

Para hacer que SQL Server Management Studio (SSMS) siempre use cifrado para conectarse a una base de datos de SQL Server, abra la ventana de conexión (Conectar al servidor) -> Opciones -> habilite el Cifrar conexión opción.

Cifrar la conexión en SQL Server Management Studio

Si «The target principal name is incorrectaparece el error «, asegúrese de estar utilizando el nombre de SQL Server especificado en el Nombre del sujeto o el certificado SAN.

error del servidor sql El nombre principal de destino es incorrecto

Puede conectarse a su SQL Server utilizando el módulo SqlServer PowerShell y asegurarse de que su SQL Server admita el cifrado de conexión:

Invoke-Sqlcmd -ServerInstance "srvdb01" -Query "SELECT DISTINCT encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID"

Invoke-Sqlcmd: compruebe si el cifrado está habilitado

En nuestro ejemplo, SQL Server admite conexiones cifradas (encrypt_option=TRUE).

Las bases de datos de Azure SQL solo admiten conexiones cifradas. Incluso si la opción Cifrar conexión en SSMS no está marcada, la conexión a Azure SQL se cifrará (consulte el artículo Seguridad de la base de datos en Azure SQL).

Artículos Interesantes