Criptografar conexões para o SQL Server no Linux

Aplica-se a: SQL Server no Linux

O SQL Server no Linux pode usar o protocolo TLS para criptografar os dados transmitidos por uma rede entre um aplicativo cliente e uma instância do SQL Server.

Suporte ao sistema operacional

SQL Server dá suporte aos mesmos protocolos TLS em Windows e Linux: 1.3, 1.2, 1.1 e 1.0.

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

  • O TLS 1.3 está habilitado por padrão
  • Não há suporte para SLES (SUSE Linux Enterprise Server)

As etapas para configurar o TLS são específicas para o sistema operacional no qual o SQL Server está em execução.

Note

O TLS não é compatível com os pontos de extremidade de espelhamento do banco de dados do grupo de disponibilidade Always On.

Requisitos para certificados

Certifique-se de que seus certificados sigam esses requisitos:

  • A hora do sistema atual deve ser posterior à propriedade Valid from do certificado e anterior à propriedade Valid to do certificado.

  • O certificado deve ser significativo para a autenticação do servidor. Isso requer que a propriedade Enhanced Key Usage do certificado especifique Server Authentication (1.3.6.1.5.5.7.3.1).

  • O certificado deve ser criado usando a opção KeySpec de AT_KEYEXCHANGE. Normalmente, a propriedade de uso de chave do certificado (KEY_USAGE) também inclui a codificação de chaves (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • A propriedade Subject do certificado deve indicar que o nome comum (CN) é igual ao nome do host ou ao nome de domínio totalmente qualificado (FQDN) do computador servidor.

    Note

    Certificados wildcard são suportados.

Como configurar bibliotecas OpenSSL para uso (opcional)

Você pode criar links simbólicos no diretório /opt/mssql/lib/ que fazem referência a quais bibliotecas libcrypto.so e libssl.so devem ser usadas para criptografia. Isso será útil se você quiser forçar o SQL Server a usar uma versão específica do OpenSSL diferente da versão padrão fornecida pelo sistema. Se esses links simbólicos não estiverem presentes, o SQL Server carregará as bibliotecas do OpenSSL padrão configuradas no sistema.

Esses links simbólicos devem se chamar libcrypto.so e libssl.so e ser colocados no diretório /opt/mssql/lib/.

Note

Para um exemplo de uso do Let's Encrypt para gerar um certificado, consulte a postagem do blog Desbloqueie o poder dos dados no Azure com o SQL Server em máquinas virtuais Linux do Azure e pesquisa de IA do Azure.

Overview

O TLS é usado para criptografar conexões de um aplicativo cliente para o SQL Server. Quando configurado corretamente, o TLS fornece privacidade e integridade de dados para comunicações entre o cliente e o servidor. As conexões TLS podem ser iniciadas pelo cliente ou iniciadas pelo servidor.

Note

O TLS não é compatível com os pontos de extremidade de espelhamento do banco de dados do grupo de disponibilidade Always On.

A seção a seguir descreve a configuração da criptografia iniciada pelo cliente.

Gerar certificado

/CN deve corresponder ao nome de domínio totalmente qualificado do host do SQL Server.

Caution

Este exemplo usa um certificado autoassinado. Os certificados autoassinados não devem ser usados para cenários de produção. Você deve usar certificados de autoridade (CA).

Certifique-se de que as pastas onde você salva seus certificados e chaves privadas estejam acessíveis pelo mssql usuário ou grupo e tenham permissões definidas para 700 (drwx------). Você pode criar pastas manualmente com permissões definidas como 700 (drwx------) e pertencentes ao mssql usuário ou grupo. Alternativamente, defina as permissões para 755 (drwxr-xr-x) e certifique-se de que as pastas estejam acessíveis ao mssql grupo. Por exemplo, você pode criar uma pasta chamada sslcert sob o caminho /var/opt/mssql/ e salvar o certificado e a chave privada com permissões nos arquivos definidos como 600, como mostrado no exemplo a seguir.

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/

Configurar SQL Server

Para o SQL Server 2022 (16.x) e versões 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

Registrar o certificado no computador cliente (Windows, Linux ou macOS)

  • Se você estiver usando um certificado assinado pela CA, copie o certificado da Autoridade Certificadora (CA) em vez do certificado de usuário para a máquina cliente.

  • Se você estiver usando o certificado autoassinado, copie o .pem arquivo para a pasta da sua distribuição e execute o comando para habilitá-lo:

    • Ubuntu: Copie o certificado para /usr/share/ca-certificates/, renomeie sua extensão para .crt, e use dpkg-reconfigure ca-certificates para habilitá-lo como um certificado da CA do sistema.

    • RHEL: Copie o certificado para /etc/pki/ca-trust/source/anchors/ e use update-ca-trust para habilitá-lo como um certificado de CA do sistema.

    • SUSE: Copie o certificado para /usr/share/pki/trust/anchors/ e use update-ca-certificates para habilitá-lo como um certificado de CA do sistema.

    • Windows: Importe o arquivo .pem como certificado em Usuário Atual>>.

    • macOS:

      • Copie o certificado para /usr/local/etc/openssl/certs.

      • Execute o seguinte comando para obter o valor de hash:

        /usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
        
      • Altere o nome do certificado para o valor desejado. Por exemplo, use mv mssql.pem dc2dd900.0. Certifique-se de que dc2dd900.0 está em /usr/local/etc/openssl/certs.

Exemplos de cadeias de conexão

Caution

Sua senha deve seguir a política de senha padrão do SQL Server. Por padrão, a senha precisa ter pelo menos oito caracteres e conter caracteres de três dos seguintes quatro conjuntos: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As senhas podem ter até 128 caracteres. Use senhas que sejam tão longas e complexas quanto possível.

  • SQL Server Management Studio

    Captura de tela da caixa de diálogo de conexão do 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;"

Erros de conexão comuns

Mensagem de erro Corrigir
The certificate chain was issued by an authority that is not trusted. Esse erro ocorre quando os clientes não conseguem verificar a assinatura no certificado apresentado por SQL Server durante o handshake de TLS. Verifique se o cliente confia no certificado do SQL Server diretamente ou na AC que assinou o certificado do SQL Server.
The target principal name is incorrect. Certifique-se de que o campo do nome comum no certificado do SQL Server corresponda ao nome do servidor especificado na cadeia de conexão do cliente.
An existing connection was forcibly closed by the remote host. Esse erro pode ocorrer quando o cliente não é compatível com a versão do protocolo TLS exigida pelo SQL Server. Por exemplo, se SQL Server estiver configurado para exigir o TLS 1.2, verifique se os clientes também são compatíveis com o protocolo TLS 1.2.

Ubuntu 20.04 e outras versões de distribuição recentes do Linux

Sintoma

Quando um SQL Server em uma instância do Linux carrega um certificado que foi criado com um algoritmo de assinatura usando menos de 112 bits de segurança (exemplos: MD5, SHA-1), você pode observar um erro de falha de conexão, como neste exemplo:

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)

O erro ocorre porque o nível de segurança 2 do OpenSSL está habilitado por padrão no Ubuntu 20.04 e versões posteriores. O nível de segurança 2 proíbe que conexões TLS com menos de 112 bits de segurança sejam estabelecidas.

Solução

Instale um certificado com um algoritmo de assinatura usando pelo menos 112 bits de segurança. Os algoritmos de assinatura que atendem a esse requisito incluem SHA-224, SHA-256, SHA-384 e SHA-512.