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.a-d.site -CertStoreLocation cert:\LocalMachine\MySi 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 grupo de escucha 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.a-d.loc,SQLRDDBCL.a-d.site -CertStoreLocation cert:\LocalMachine\My -notafter $add3yearImporte el certificado a la lista de certificados de confianza:
$certFile = Export-Certificate -Cert $newcert -FilePath C:\certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullNameSi está utilizando 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:
Ejecute el Administrador de configuración de SQL Server, vaya a Configuración de red de SQL Server y abra las propiedades de Protocolos para MSSQLSERVER;
Habilite Forzar cifrado;
Vaya a la pestaña Certificado y seleccione el certificado que importó al almacén de certificados de usuario o computadora en la lista desplegable;
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 -> habilite Cifrado de protocolo forzado.
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.a-d.site;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 que SQL Server Management Studio (SSMS) utilice siempre el cifrado para conectarse a una base de datos de SQL Server, abra la ventana de conexión (Conectar al servidor) -> Opciones -> habilite la opción Cifrar conexión.
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.
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"Si su instancia de SQL Server no se ejecuta en el puerto predeterminado, t se especifica de la siguiente manera:
-ServerInstance "srvdb01,23223"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).






