Cifrado de las conexiones a SQL Server en Linux

Se aplica a:SQL Server en Linux

SQL Server en Linux puede usar Seguridad de la capa de transporte (TLS) para cifrar los datos transmitidos a través de una red entre una aplicación cliente y una instancia de SQL Server.

Compatibilidad con sistema operativo

SQL Server admite los mismos protocolos TLS en Windows y Linux: 1.3, 1.2, 1.1 y 1.0.

A partir de SQL Server 2025 (17.x):

  • TLS 1.3 está habilitado de forma predeterminada
  • No se admite SUSE Linux Enterprise Server (SLES)

Los pasos para configurar TLS son específicos del sistema operativo en el que se ejecuta SQL Server.

Note

TLS no es compatible con los extremos de creación de reflejo de la base de datos de los grupos de disponibilidad Always On.

Requisitos de los certificados

Asegúrese de que los certificados siguen estos requisitos:

  • La hora actual del sistema debe ser posterior a la propiedad Valid from del certificado y anterior a la propiedad Valid to del certificado.

  • El certificado debe estar destinado a la autenticación del servidor. Esto requiere que la propiedad Enhanced Key Usage del certificado especifique Server Authentication (1.3.6.1.5.5.7.3.1).

  • El certificado se debe crear mediante la opción KeySpec de AT_KEYEXCHANGE. Por lo general, la propiedad de uso de clave del certificado (KEY_USAGE) incluye también el cifrado de clave (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • La propiedad Subject del certificado debe indicar que el nombre común (CN) es el mismo que el nombre del host o nombre de dominio completo (FQDN) del equipo servidor.

    Note

    Se admiten certificados comodín.

Configuración de bibliotecas OpenSSL para su uso (opcional)

Puede crear vínculos simbólicos en el directorio /opt/mssql/lib/ que hagan referencia a qué bibliotecas libcrypto.so y libssl.so que se deben usar para el cifrado. Esto resulta útil si quiere forzar SQL Server a usar una versión específica de OpenSSL distinta del valor predeterminado que proporciona el sistema. Si estos vínculos simbólicos no están presentes, SQL Server carga en el sistema las bibliotecas configuradas predeterminadas de OpenSSL.

Estos vínculos simbólicos deben denominarse libcrypto.so y libssl.so y colocarse en el directorio /opt/mssql/lib/.

Note

Para ver un ejemplo del uso de Let's Encrypt para generar un certificado, consulte la entrada de blog Desbloquear el poder de los datos en Azure con SQL Server en máquinas virtuales de Azure con Linux y Azure AI Search.

Visión general

TLS se usa para cifrar las conexiones de una aplicación cliente a SQL Server. Cuando se configura correctamente, TLS proporciona privacidad e integridad de datos para las comunicaciones entre el cliente y el servidor. Tanto el cliente como el servidor pueden iniciar conexiones TLS.

Note

TLS no es compatible con los extremos de creación de reflejo de la base de datos de los grupos de disponibilidad Always On.

En la sección siguiente se describe cómo configurar el cifrado iniciado por el cliente.

Generar certificado

/CN debe coincidir con el nombre de dominio completo del host de SQL Server.

Caution

En este ejemplo se usa un certificado autofirmado. Los certificados autofirmados no se deben usar para escenarios de producción. Debe usar certificados de CA.

Asegúrate de que las carpetas donde guardas tus certificados y claves privadas sean accesibles para el mssql usuario o grupo y tengan los permisos configurados en 700 (drwx------). Puedes crear carpetas manualmente con permisos configurados en 700 (drwx------) y propiedad del mssql usuario o grupo. Alternativamente, configura los permisos en 755 (drwxr-xr-x) y asegúrate de que las carpetas sean accesibles para el mssql grupo. Por ejemplo, puedes crear una carpeta llamada sslcert bajo la ruta /var/opt/mssql/ y guardar el certificado y la clave privada con permisos en los archivos configurados en 600, como se muestra en el siguiente ejemplo.

openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365
sudo chown mssql:mssql mssql.pem mssql.key
sudo chmod 600 mssql.pem mssql.key
# Save the certificate to the certs folder under /etc/ssl/
sudo mv mssql.pem /etc/ssl/certs/
# Save the private key to the private folder under /etc/ssl/
sudo mv mssql.key /etc/ssl/private/

Configuración de SQL Server

Para SQL Server 2022 (16.x) y versiones anteriores:

systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 0
systemctl restart mssql-server

Para SQL Server 2025 (17.x):

systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 0
systemctl restart mssql-server

Registro del certificado en el equipo cliente (Windows, Linux o macOS)

  • Si usas un certificado firmado por la CA, copia el certificado de la Autoridad Certificadora (CA) en lugar del certificado de usuario al equipo cliente.

  • Si usas el certificado auto-firmado, copia el .pem archivo a la carpeta de tu distribución y ejecuta el comando para habilitarlo:

    • Ubuntu: Copia el certificado a /usr/share/ca-certificates/, renombra su extensión a .crt, y úsalo dpkg-reconfigure ca-certificates para habilitarlo como certificado de la CA del sistema.

    • RHEL: Copia el certificado y /etc/pki/ca-trust/source/anchors/ úsalo update-ca-trust para habilitarlo como certificado de la CA del sistema.

    • SUSE: Copia el certificado a /usr/share/pki/trust/anchors/ y usa update-ca-certificates para habilitarlo como certificado de CA del sistema.

    • Windows: Importa el archivo .pem como certificado en Usuario actual>>.

    • macOS:

      • Copia el certificado a /usr/local/etc/openssl/certs.

      • Ejecute el comando siguiente para obtener el valor hash:

        /usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
        
      • Cambie el nombre del certificado al valor. Por ejemplo, use mv mssql.pem dc2dd900.0. Asegúrate de que dc2dd900.0 esté en /usr/local/etc/openssl/certs.

Ejemplos de cadena de conexión

Caution

La contraseña debe seguir la directiva de contraseña predeterminada de SQL Server. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Las contraseñas pueden tener hasta 128 caracteres. Use contraseñas lo más largas y complejas posible.

  • SQL Server Management Studio

    Captura de pantalla del cuadro de diálogo de conexión para SQL Server Management Studio.

  • sqlcmd

    sqlcmd -S <sqlhostname> -N -U sa -P '<password>'

  • ADO.NET

    "Encrypt=True; TrustServerCertificate=False;"

  • ODBC

    "Encrypt=Yes; TrustServerCertificate=no;"

  • JDBC

    "encrypt=true; trustServerCertificate=false;"

Errores de conexión comunes

Mensaje de error Corregir
The certificate chain was issued by an authority that is not trusted. Este error se produce cuando los clientes no pueden comprobar la firma del certificado que ha presentado SQL Server durante el protocolo de enlace de TLS. Asegúrese de que el cliente confía directamente en el certificado SQL Server o en la CA que firmó el certificado de SQL Server.
The target principal name is incorrect. Asegúrate de que el campo de nombre común en el certificado de SQL Server coincida con el nombre del servidor especificado en la cadena de conexión del cliente.
An existing connection was forcibly closed by the remote host. Este error puede producirse si el cliente no admite la versión del protocolo TLS que requiere SQL Server. Por ejemplo, si SQL Server está configurado para requerir TLS 1.2, asegúrese de que los clientes también admitan el protocolo TLS 1.2.

Ubuntu 20.04 y otras versiones de distribuciones de Linux recientes

Síntoma

Cuando una instancia de SQL Server en Linux carga un certificado creado con un algoritmo de firma con menos de 112 bits de seguridad (ejemplos: MD5, SHA-1), es posible que observe un error de conexión, como en este ejemplo:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host.) (Microsoft SQL Server, Error: 10054)

El error se debe a que el nivel de seguridad 2 de OpenSSL está habilitado de forma predeterminada en Ubuntu 20.04 y versiones posteriores. El nivel de seguridad 2 prohíbe que se establezcan conexiones TLS que tengan menos de 112 bits de seguridad.

Solución

Instale un certificado con un algoritmo de firma con al menos 112 bits de seguridad. Los algoritmos de firma que cumplen este requisito incluyen SHA-224, SHA-256, SHA-384 y SHA-512.