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öreValid to
-egenskapen för certifikatet.Certifikatet måste vara avsett för serverautentisering. Detta kräver egenskapen
Enhanced Key Usage
på certifikatet att angeServer Authentication (1.3.6.1.5.5.7.3.1)
.Certifikatet måste skapas med hjälp av alternativet
KeySpec
förAT_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.crt
och använddpkg-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ändupdate-ca-trust
för att aktivera det som certifikat för systemcertifikatutfärdare.SUSE: Kopiera certifikatet till
/usr/share/pki/trust/anchors/
och användupdate-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 attdc2dd900.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
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.