Šifrování připojení k SQL Serveru v Linuxu

Platí pro:SQL Server na Linuxu

SQL Server v Linuxu může pomocí protokolu TLS (Transport Layer Security) šifrovat data přenášená přes síť mezi klientskou aplikací a instancí SQL Serveru.

Podpora operačního systému

SQL Server podporuje stejné protokoly TLS na Windows i Linuxu: 1.3, 1.2, 1.1 a 1.0.

Počínaje SQL Serverem 2025 (17.x):

  • Protokol TLS 1.3 je ve výchozím nastavení povolený.
  • SUSE Linux Enterprise Server (SLES) se nepodporuje.

Postup konfigurace protokolu TLS je specifický pro operační systém, na kterém běží SQL Server.

Note

Pro koncové body pro zrcadlení databáze skupiny dostupnosti Always On nejsou protokoly TLS podporovány.

Požadavky na certifikáty

Ujistěte se, že vaše certifikáty splňují tyto požadavky:

  • Aktuální systémový čas musí být po vlastnosti Valid from certifikátu a před vlastností Valid to certifikátu.

  • Certifikát musí být určený pro ověřování serveru. To vyžaduje, aby vlastnost Enhanced Key Usage certifikátu byla specifikována Server Authentication (1.3.6.1.5.5.7.3.1).

  • Certifikát musí být vytvořen pomocí možnosti KeySpecAT_KEYEXCHANGE. Vlastnost použití klíče certifikátu (KEY_USAGE) obvykle zahrnuje také šifrování klíče (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Vlastnost Subject certifikátu musí znamenat, že běžný název (CN) je stejný jako název hostitele nebo plně kvalifikovaný název domény (FQDN) počítače serveru.

    Note

    Podporují se certifikáty se zástupnými znaky.

Konfigurace knihoven OpenSSL pro použití (volitelné)

V adresáři /opt/mssql/lib/ můžete vytvořit symbolické odkazy, které odkazují na knihovny libcrypto.so a libssl.so pro šifrování. To je užitečné, pokud chcete vynutit, aby SQL Server používal jinou verzi OpenSSL než výchozí, kterou poskytuje systém. Pokud tyto symbolické odkazy nejsou k dispozici, SQL Server načte výchozí nakonfigurované knihovny OpenSSL v systému.

Tyto symbolické odkazy by měly být pojmenovány libcrypto.so a libssl.so a umístěny v adresáři /opt/mssql/lib/.

Note

Příklad použití funkce Let's Encrypt k vygenerování certifikátu najdete v blogovém příspěvku Odemknutí výkonu dat v Azure s SQL Serverem na virtuálních počítačích Azure s Linuxem a službou Azure AI Search.

Overview

Tls se používá k šifrování připojení z klientské aplikace k SQL Serveru. Při správné konfiguraci zajišťuje protokol TLS jak ochranu osobních údajů, tak integritu dat pro komunikaci mezi klientem a serverem. Připojení TLS můžou být inicializována klientem nebo iniciovanou serverem.

Note

Pro koncové body pro zrcadlení databáze skupiny dostupnosti Always On nejsou protokoly TLS podporovány.

Následující část popisuje nastavení šifrování iniciovaného klientem.

Generování certifikátu

/CN by se měl shodovat s plně kvalifikovaným názvem domény hostitele SQL Serveru.

Caution

Tento příklad používá certifikát podepsaný svým držitelem. Certifikáty podepsané svým držitelem by se neměly používat pro produkční scénáře. Měli byste použít certifikáty certifikační autority.

Ujistěte se, že složky, kde ukládáte certifikáty a soukromé klíče, jsou přístupné uživateli mssql nebo skupině a mají nastavená oprávnění na 700 (drwx------). Složky můžete vytvářet ručně s oprávněními nastavenými na 700 (drwx------) a vlastněnými uživatelem mssql nebo skupinou. Případně nastavte oprávnění na 755 (drwxr-xr-x) a ujistěte se, že složky jsou pro skupinu přístupné mssql . Například můžete vytvořit složku zavolanou sslcert pod cestou /var/opt/mssql/ a uložit certifikát a soukromý klíč s oprávněními na souborech nastavenými na 600, jak je ukázáno v následujícím příkladu.

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/

Konfigurace SQL Serveru

Pro SQL Server 2022 (16.x) a starší verze:

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

Pro 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

Registrace certifikátu na klientském počítači (Windows, Linux nebo macOS)

  • Pokud používáte certifikát podepsaný CA, zkopírujte certifikát Certificate Authority (CA) místo uživatelského certifikátu na klientský stroj.

  • Pokud používáte samopodepsaný certifikát, zkopírujte .pem soubor do složky pro distribuci a spusťte příkaz k jeho povolení:

    • Ubuntu: Zkopírujte certifikát do /usr/share/ca-certificates/, přejmenujte jeho rozšíření na .crt, a použijte dpkg-reconfigure ca-certificates ho pro povolení jako certifikát systémové CA.

    • RHEL: Zkopírujte certifikát do umístění /etc/pki/ca-trust/source/anchors/ a pomocí update-ca-trust jej aktivujte jako certifikát systémové CA.

    • SUSE: Zkopírujte certifikát do /usr/share/pki/trust/anchors/ a pomocí update-ca-certificates jej povolte jako systémový certifikát CA.

    • Windows: Importujte soubor .pem jako certifikát v části Aktuální uživatel>Důvěryhodné kořenové certifikační autority>Certifikáty.

    • macOS:

      • Zkopírovat certifikát do /usr/local/etc/openssl/certs.

      • Spuštěním následujícího příkazu získejte hodnotu hash:

        /usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
        
      • Přejmenujte certifikát na zadanou hodnotu. Například použijte mv mssql.pem dc2dd900.0. Ujistěte se, že dc2dd900.0 je v /usr/local/etc/openssl/certs.

Příklady připojovacích řetězců

Caution

Vaše heslo by mělo splňovat výchozí zásady hesla pro SQL Server. Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

  • SQL Server Management Studio

    snímek obrazovky s dialogovým oknem připojení aplikace 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;"

Běžné chyby připojení

Zpráva o chybě Opravit
The certificate chain was issued by an authority that is not trusted. K této chybě dochází v případě, že klienti nemůžou ověřit podpis na certifikátu prezentovaného SQL Serverem během metody handshake protokolu TLS. Ujistěte se, že klient důvěřuje certifikátu SQL Serveru přímo nebo certifikační autoritě, která certifikát SYSTÉMU SQL Server podepsala.
The target principal name is incorrect. Ujistěte se, že pole běžného názvu na certifikátu SQL Server odpovídá názvu serveru uvedenému v připojovací řetězec klienta.
An existing connection was forcibly closed by the remote host. K této chybě může dojít v případě, že klient nepodporuje verzi protokolu TLS vyžadovanou SQL Serverem. Pokud je například SQL Server nakonfigurovaný tak, aby vyžadoval protokol TLS 1.2, ujistěte se, že vaši klienti podporují také protokol TLS 1.2.

Ubuntu 20.04 a další nedávné verze distribuce Linuxu

Symptom

Když SQL Server v instanci Linuxu načte certifikát vytvořený pomocí algoritmu podpisu, který používá méně než 112 bitů zabezpečení (například MD5, SHA-1), může se zobrazit chyba selhání připojení, například v tomto příkladu:

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)

Příčinou chyby je povolení úrovně zabezpečení OpenSSL 2 ve výchozím nastavení v Ubuntu 20.04 a novějších verzích. Úroveň zabezpečení 2 zakazuje navázání připojení TLS, která mají méně než 112 bitů zabezpečení.

Řešení

Nainstalujte certifikát s podpisovým algoritmem, který nabízí úroveň zabezpečení alespoň 112 bitů. Algoritmy podpisů, které splňují tento požadavek, zahrnují SHA-224, SHA-256, SHA-384 a SHA-512.