Kryptera anslutningar till SQL Server i Linux

Gäller för:SQL Server i Linux

SQL Server på Linux kan använda TLS (Transport Layer Security) för att kryptera data som överförs över ett nätverk mellan ett klientprogram och en instans av SQL Server.

Stöd för operativsystem

SQL Server stöder samma TLS-protokoll på både Windows och Linux: 1.3, 1.2, 1.1 och 1.0.

Från och med SQL Server 2025 (17.x):

  • TLS 1.3 är aktiverat som standard
  • SUSE Linux Enterprise Server (SLES) stöds inte

Stegen för att konfigurera TLS är specifika för operativsystemet där SQL Server körs.

Note

TLS stöds inte för AlwaysOn-tillgänglighetsgruppens databasspeglingsslutpunkter.

Krav för certifikat

Kontrollera att dina certifikat följer dessa krav:

  • Den aktuella systemtiden måste vara efter Valid from-egenskapen för certifikatet och före Valid to-egenskapen för certifikatet.

  • Certifikatet måste vara avsett för serverautentisering. Detta kräver egenskapen Enhanced Key Usage på certifikatet att ange Server Authentication (1.3.6.1.5.5.7.3.1).

  • Certifikatet måste skapas med hjälp av alternativet KeySpec för AT_KEYEXCHANGE. Vanligtvis innehåller certifikatets nyckelanvändningsegenskap (KEY_USAGE) även nyckelchiffrering (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Den Subject egenskapen för certifikatet måste ange att det gemensamma namnet (CN) är samma som värdnamnet eller det fullständigt kvalificerade domännamnet (FQDN) på serverdatorn.

    Note

    Wildcard-certifikat stöds.

Konfigurera OpenSSL-biblioteken för användning (valfritt)

Du kan skapa symboliska länkar i katalogen /opt/mssql/lib/ som refererar till vilka libcrypto.so- och libssl.so bibliotek som ska användas för kryptering. Det här är användbart om du vill tvinga SQL Server att använda en annan version av OpenSSL än den standard som tillhandahålls av systemet. Om dessa symboliska länkar inte är närvarande laddar SQL Server de OpenSSL-bibliotek som är konfigurerade som standard på systemet.

Dessa symboliska länkar ska namnges libcrypto.so och libssl.so och placeras i katalogen /opt/mssql/lib/.

Note

Ett exempel på att använda Let's Encrypt för att generera ett certifikat finns i blogginlägget Frigör kraften i data i Azure med SQL Server på Linux Azure-VM:er och Azure AI-sökning.

Overview

TLS används för att kryptera anslutningar från ett klientprogram till SQL Server. När TLS är korrekt konfigurerat ger det både sekretess och dataintegritet för kommunikation mellan klienten och servern. TLS-anslutningar kan antingen vara klientinitierade eller serverinitierade.

Note

TLS stöds inte för AlwaysOn-tillgänglighetsgruppens databasspeglingsslutpunkter.

I följande avsnitt beskrivs hur du konfigurerar klientinitierad kryptering.

Generera certifikat

/CN ska matcha SQL Server-värdens fullständigt kvalificerade domännamn.

Caution

I det här exemplet används ett självsignerat certifikat. Självsignerade certifikat ska inte användas för produktionsscenarier. Du bör använda CA-certifikat.

Se till att mapparna där du sparar dina certifikat och privata nycklar är tillgängliga för användaren mssql eller gruppen och har behörigheter inställda på 700 (drwx------). Du kan skapa mappar manuellt med behörigheter inställda på 700 (drwx------) och ägda av användaren mssql eller gruppen. Alternativt, sätt behörigheterna till 755 (drwxr-xr-x) och se till att mapparna är tillgängliga för mssql gruppen. Till exempel kan du skapa en mapp som anropas sslcert under sökvägen /var/opt/mssql/ och spara certifikatet och den privata nyckeln med behörigheter på filerna satta till 600, som visas i följande exempel.

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/

Konfigurera SQL Server

För SQL Server 2022 (16.x) och tidigare versioner:

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

För 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

Registrera certifikatet på klientdatorn (Windows, Linux eller macOS)

  • Om du använder ett CA-signerat certifikat, kopiera certifikatutfärdarens (CA) certifikat istället för användarcertifikatet till klientmaskinen.

  • Om du använder det självsignerade certifikatet, kopiera .pem filen till mappen för din distribution och kör kommandot för att aktivera det:

    • Ubuntu: Kopiera certifikatet till /usr/share/ca-certificates/, byt namn på dess tillägg till .crt, och använd dpkg-reconfigure ca-certificates det för att aktivera det som ett systemcertifikat i CA.

    • RHEL: Kopiera certifikatet till /etc/pki/ca-trust/source/anchors/ och använd update-ca-trust det för att aktivera det som ett system-CA-certifikat.

    • SUSE: Kopiera certifikatet till /usr/share/pki/trust/anchors/ och använd update-ca-certificates det för att aktivera det som ett systemcertifikat för CA.

    • Windows: Importera filen .pem som ett certifikat under Aktuell användare>Betrodda rotcertifikatutfärdare>Certifikat.

    • macOS:

      • Kopiera certifikatet till /usr/local/etc/openssl/certs.

      • Kör följande kommando för att hämta hash-värdet:

        /usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
        
      • Byt namn på certifikatet till det angivna värdet. Använd till exempel mv mssql.pem dc2dd900.0. Se till att dc2dd900.0 finns i /usr/local/etc/openssl/certs.

Exempel på anslutningssträngar

Caution

Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.

  • SQL Server Management Studio

    Skärmbild av anslutningsdialogrutan för 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;"

Vanliga anslutningsfel

Felmeddelande Reparera
The certificate chain was issued by an authority that is not trusted. Det här felet uppstår när klienter inte kan verifiera signaturen på certifikatet som presenteras av SQL Server under TLS-handskakningen. Kontrollera att klienten litar på antingen SQL Server-certifikatet direkt eller certifikatutfärdare som signerade SQL Server-certifikatet.
The target principal name is incorrect. Se till att fältet för vanligt namn på SQL Server-certifikatet matchar servernamnet som anges i klientens reťazec pripojenia.
An existing connection was forcibly closed by the remote host. Det här felet kan inträffa när klienten inte stöder den TLS-protokollversion som krävs av SQL Server. Om SQL Server till exempel har konfigurerats för att kräva TLS 1.2 kontrollerar du att dina klienter även stöder TLS 1.2-protokollet.

Ubuntu 20.04 och andra senaste Linux-distributionsversioner

Symptom

När en SQL Server på Linux-instans läser in ett certifikat som har skapats med en signaturalgoritm med mindre än 112 bitars säkerhet (exempel: MD5, SHA-1), kan du observera ett anslutningsfel, som i det här exemplet:

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)

Felet beror på att OpenSSL-säkerhetsnivå 2 har aktiverats som standard på Ubuntu 20.04 och senare versioner. Säkerhetsnivå 2 förbjuder TLS-anslutningar som har mindre än 112 bitars säkerhet från att upprättas.

Lösning

Installera ett certifikat med en signaturalgoritm med minst 112 bitars säkerhet. Signaturalgoritmer som uppfyller detta krav inkluderar SHA-224, SHA-256, SHA-384 och SHA-512.