Verbindingen met SQL Server op Linux versleutelen
van toepassing op:SQL Server- - Linux
SQL Server op Linux kan TLS (Transport Layer Security) gebruiken om gegevens te versleutelen die via een netwerk worden verzonden tussen een clienttoepassing en een exemplaar van SQL Server. SQL Server ondersteunt dezelfde TLS-protocollen op zowel Windows als Linux: TLS 1.2, 1.1 en 1.0. De stappen voor het configureren van TLS zijn echter specifiek voor het besturingssysteem waarop SQL Server wordt uitgevoerd.
Vereisten voor certificaten
Zorg ervoor dat uw certificaten aan deze vereisten voldoen:
De huidige systeemtijd moet na de
Valid from
eigenschap van het certificaat en vóór de eigenschapValid to
van het certificaat zijn.Het certificaat moet zijn bedoeld voor serververificatie. Hiervoor is de
Enhanced Key Usage
eigenschap van het certificaat vereist omServer Authentication (1.3.6.1.5.5.7.3.1)
op te geven.Het certificaat moet worden gemaakt met behulp van de optie
KeySpec
vanAT_KEYEXCHANGE
. Meestal bevat de eigenschap sleutelgebruik van het certificaat (KEY_USAGE
) ook sleutelcodering (CERT_KEY_ENCIPHERMENT_KEY_USAGE
).De eigenschap
Subject
van het certificaat moet aangeven dat de algemene naam (CN) gelijk is aan de hostnaam of FQDN (Fully Qualified Domain Name) van de servercomputer.Notitie
Wildcardcertificaten worden ondersteund.
De OpenSSL-bibliotheken configureren voor gebruik (optioneel)
U kunt symbolische koppelingen maken in de /opt/mssql/lib/
map die verwijst naar welke libcrypto.so
en libssl.so
bibliotheken moeten worden gebruikt voor versleuteling. Dit is handig als u wilt afdwingen dat SQL Server een andere versie van OpenSSL gebruikt dan de standaardversie van het systeem. Als deze symbolische koppelingen niet aanwezig zijn, laadt SQL Server de standaard geconfigureerde OpenSSL-bibliotheken op het systeem.
Deze symbolische koppelingen moeten libcrypto.so
en libssl.so
worden genoemd en in de map /opt/mssql/lib/
worden geplaatst.
Notitie
Voor een voorbeeld van het gebruik van Let's Encrypt om een certificaat te genereren, raadpleegt u het blogbericht De kracht van gegevens in Azure ontgrendelen met SQL Server op Virtuele Linux Azure-machines en Azure AI search.
Overzicht
TLS wordt gebruikt om verbindingen van een clienttoepassing met SQL Server te versleutelen. Wanneer TLS correct is geconfigureerd, biedt TLS zowel privacy als gegevensintegriteit voor communicatie tussen de client en de server. TLS-verbindingen kunnen worden geïnitieerd door de client of de server.
In de volgende sectie wordt beschreven hoe u door de client geïnitieerde versleuteling instelt.
Certificaat genereren
/CN
moet overeenkomen met de volledig gekwalificeerde domeinnaam van uw SQL Server-host.
Voorzichtigheid
In dit voorbeeld wordt een zelfondertekend certificaat gebruikt. Zelfondertekende certificaten mogen niet worden gebruikt voor productiescenario's. U moet CA-certificaten gebruiken.
Zorg ervoor dat de mappen waarin u uw certificaten en persoonlijke sleutels opslaat, toegankelijk zijn voor de mssql
gebruiker/groep en machtigingen hebben ingesteld op 700
(drwx-----
). U kunt mappen handmatig maken met machtigingen die zijn ingesteld op 700
(drwx------
) en die eigendom zijn van de mssql
gebruiker/groep, of de machtiging instellen op 755
(drwxr-xr-x
), die eigendom zijn van een andere gebruiker, maar nog steeds toegankelijk zijn voor de mssql
gebruikersgroep. U kunt bijvoorbeeld een map maken met de naam sslcert
onder het pad /var/opt/mssql/
en het certificaat en de persoonlijke sleutel opslaan met machtigingen voor de bestanden die zijn ingesteld op 600
, zoals wordt weergegeven in het volgende voorbeeld.
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/
SQL Server configureren
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
Het certificaat registreren op uw clientcomputer (Windows, Linux of macOS)
Als u een ondertekend CA-certificaat gebruikt, moet u het certificaat van de certificeringsinstantie (CA) kopiëren in plaats van het gebruikerscertificaat naar de clientcomputer.
Als u het zelfondertekende certificaat gebruikt, kopieert u het
.pem
bestand naar de volgende mappen die van toepassing zijn op distributie en voert u de opdrachten uit om ze in te schakelen:Ubuntu-: kopieer het certificaat naar
/usr/share/ca-certificates/
, wijzig de extensie in.crt
en gebruikdpkg-reconfigure ca-certificates
om het in te schakelen als systeem-CA-certificaat.RHEL-: kopieer het certificaat naar
/etc/pki/ca-trust/source/anchors/
en gebruikupdate-ca-trust
om het in te schakelen als ca-certificaat van het systeem.SUSE-: kopieer het certificaat naar
/usr/share/pki/trust/anchors/
en gebruikupdate-ca-certificates
om het in te schakelen als systeem-CA-certificaat.Windows: importeer het
.pem
-bestand als een certificaat onder Huidige gebruiker > vertrouwde basiscertificeringsinstanties > certificaten.macOS-:
Kopieer het certificaat naar
/usr/local/etc/openssl/certs
Voer de volgende opdracht uit om de hashwaarde op te halen:
/usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
Hernoem het certificaat naar de waarde. Bijvoorbeeld:
mv mssql.pem dc2dd900.0
. Zorg ervoor datdc2dd900.0
zich in/usr/local/etc/openssl/certs
Voorbeeld van verbindingsreeksen
Voorzichtigheid
Uw wachtwoord moet voldoen aan het standaard wachtwoordbeleid van SQL Server . Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
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;"
Veelvoorkomende verbindingsfouten
Foutmelding | Repareren |
---|---|
The certificate chain was issued by an authority that is not trusted. |
Deze fout treedt op wanneer clients de handtekening niet kunnen controleren op het certificaat dat door SQL Server wordt gepresenteerd tijdens de TLS-handshake. Zorg ervoor dat de client het SQL Server-certificaat rechtstreeks vertrouwt of de CA die het SQL Server-certificaat heeft ondertekend. |
The target principal name is incorrect. |
Zorg ervoor dat het veld Algemene naam in het certificaat van SQL Server overeenkomt met de servernaam die is opgegeven in de verbindingsreeks van de client. |
An existing connection was forcibly closed by the remote host. |
Deze fout kan optreden wanneer de client geen ondersteuning biedt voor de TLS-protocolversie die is vereist voor SQL Server. Als SQL Server bijvoorbeeld is geconfigureerd om TLS 1.2 te vereisen, moet u ervoor zorgen dat uw clients ook het TLS 1.2-protocol ondersteunen. |
Ubuntu 20.04 en andere recente Linux-distributieversies
symptoom
Wanneer een SQL Server op een Linux-exemplaar een certificaat laadt dat is gemaakt met een handtekeningalgoritme met minder dan 112 bits van beveiliging (voorbeelden: MD5, SHA-1), kan er een verbindingsfout optreden, zoals in dit voorbeeld:
Er is een verbinding tot stand gebracht met de server, maar er is een fout opgetreden tijdens het aanmeldingsproces. (provider: SSL-provider, fout: 0 - Een bestaande verbinding is geforceerd gesloten door de externe host.) (Microsoft SQL Server, Fout: 10054)
De fout wordt veroorzaakt doordat OpenSSL-beveiligingsniveau 2 standaard is ingeschakeld op Ubuntu 20.04 en nieuwere versies. Met beveiligingsniveau 2 kunnen TLS-verbindingen met minder dan 112 bits niet tot stand worden gebracht.
Solution
Installeer een certificaat met een handtekening-algoritme met ten minste 112 bits aan beveiliging. Handtekeningalgoritmen die voldoen aan deze vereiste zijn SHA-224, SHA-256, SHA-384 en SHA-512.