Dela via


Kryptera anslutningar till SQL Server i Linux

gäller för:SQL Server – 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. SQL Server stöder samma TLS-protokoll i både Windows och Linux: TLS 1.2, 1.1 och 1.0. Stegen för att konfigurera TLS är dock specifika för det operativsystem där SQL Server körs.

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.

    Obs

    Wild card-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/.

Anmärkning

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.

Överblick

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.

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

Generera certifikat

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

Försiktighet

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.

Kontrollera att mapparna där du sparar dina certifikat och privata nycklar är tillgängliga för mssql användare/grupp och har behörighet inställd på 700 (drwx-----). Du kan skapa mappar manuellt med behörighet inställd på 700 (drwx------) och ägs av mssql användare/grupp, eller ange behörigheten till 755 (drwxr-xr-x), som ägs av en annan användare men fortfarande är tillgänglig för mssql användargruppen. Du kan till exempel skapa en mapp med namnet sslcert under sökvägen /var/opt/mssql/och spara certifikatet och den privata nyckeln med behörigheter för de filer som anges till 600, enligt 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
#Saving the certificate to the certs folder under /etc/ssl/ which has the following permission 755(drwxr-xr-x)
sudo mv mssql.pem /etc/ssl/certs/ drwxr-xr-x
#Saving the private key to the private folder under /etc/ssl/ with permissions set to 755(drwxr-xr-x)
sudo mv mssql.key /etc/ssl/private/

Konfigurera SQL Server

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

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

  • Om du använder ca-signerat certifikat måste du kopiera certifikatutfärdarcertifikatet (CA) i stället för användarcertifikatet till klientdatorn.

  • Om du använder det självsignerade certifikatet kopierar du .pem-filen till följande mappar för distribution och kör kommandona för att aktivera dem:

  • Ubuntu: Kopiera certifikatet till /usr/share/ca-certificates/, byt namn på tillägget till .crtoch använd dpkg-reconfigure ca-certificates för att aktivera det som certifikat för systemcertifikatutfärdare.

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

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

  • Windows: Importera .pem-filen 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. Till exempel: mv mssql.pem dc2dd900.0. Kontrollera att dc2dd900.0 finns i /usr/local/etc/openssl/certs

Exempel på anslutningssträngar

Försiktighet

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. Kontrollera att fältet Eget namn på SQL Server-certifikatet matchar servernamnet som anges i klientens anslutningssträng.
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:

En anslutning upprättades med servern, men sedan uppstod ett fel under inloggningsprocessen. (provider: SSL-Provider, fel: 0 – En befintlig anslutning stängdes av fjärrvärden.) (Microsoft SQL Server, Fel: 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.