Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server unter Linux
SQL Server für Linux kann Transport Layer Security (TLS) verwenden, um Daten zu verschlüsseln, die über ein Netzwerk zwischen einer Clientanwendung und einer Instanz von SQL Server übertragen werden.
Betriebssystemunterstützung
SQL Server unterstützt die gleichen TLS-Protokolle sowohl für Windows als auch für Linux: 1.3, 1.2, 1.1 und 1.0.
Ab SQL Server 2025 (17.x):
- TLS 1.3 ist standardmäßig aktiviert.
- SUSE Linux Enterprise Server (SLES) wird nicht unterstützt.
Die Schritte zum Konfigurieren von TLS sind spezifisch für das Betriebssystem, auf dem SQL Server ausgeführt wird.
Note
TLS wird für Always-On-Verfügbarkeitsgruppen-Datenbankspiegelungsendpunkte nicht unterstützt.
Anforderungen an Zertifikate
Stellen Sie sicher, dass Ihre Zertifikate den folgenden Anforderungen entsprechen:
Die aktuelle Systemzeit muss nach der
Valid from-Eigenschaft und vor derValid to-Eigenschaft des Zertifikats liegen.Das Zertifikat muss für die Serverauthentifizierung vorgesehen sein. Dazu muss die
Enhanced Key Usage-Eigenschaft des ZertifikatsServer Authentication (1.3.6.1.5.5.7.3.1)spezifizieren.Das Zertifikat muss mithilfe der
KeySpec-Option vonAT_KEYEXCHANGEerstellt werden. Normalerweise enthält die Schlüsselverwendungseigenschaft (KEY_USAGE) des Zertifikats auch die Schlüsselverschlüsselung (CERT_KEY_ENCIPHERMENT_KEY_USAGE).Mit der Eigenschaft
Subjectdes Zertifikats muss angegeben werden, dass der allgemeine Name (Common Name, CN) mit dem Hostnamen oder dem vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) des Servercomputers übereinstimmt.Note
Wildcardzertifikate werden unterstützt.
Konfigurieren der OpenSSL-Bibliotheken zur Verwendung (optional)
Sie können symbolische Verknüpfungen im /opt/mssql/lib/-Verzeichnis erstellen, die darauf verweisen, welche libcrypto.so- und libssl.so-Bibliotheken für die Verschlüsselung verwendet werden sollen. Dies ist hilfreich, wenn Sie erzwingen möchten, dass SQL Server eine bestimmte andere OpenSSL-Version als die vom System bereitgestellte Standardversion verwendet. Wenn diese symbolischen Verknüpfungen nicht vorhanden sind, lädt SQL Server die standardmäßig auf dem System konfigurierten OpenSSL-Bibliotheken.
Diese symbolischen Verknüpfungen sollten mit libcrypto.so und libssl.so benannt und in das /opt/mssql/lib/-Verzeichnis eingefügt werden.
Note
Ein Beispiel für die Verwendung von „Let's Encrypt“ zum Generieren eines Zertifikats finden Sie im Blogbeitrag Nutzen der Leistungsfähigkeit von Daten in Azure mit SQL Server auf Linux-Azure-VMs und Azure KI-Suche.
Overview
TLS wird zum Verschlüsseln von Verbindungen einer Clientanwendung mit SQL Server verwendet. Bei ordnungsgemäßer Konfiguration bietet TLS sowohl Datenschutz als auch Datenintegrität für die Kommunikation zwischen dem Client und dem Server. TLS-Verbindungen können entweder vom Client oder vom Server initiiert werden.
Note
TLS wird für Always-On-Verfügbarkeitsgruppen-Datenbankspiegelungsendpunkte nicht unterstützt.
Im folgenden Abschnitt wird das Einrichten der vom Client initiierten Verschlüsselung beschrieben.
Generieren eines Zertifikats
/CN sollte mit dem vollqualifizierten Domänennamen des SQL Server-Hosts identisch sein.
Caution
In diesem Beispiel wird ein selbstsigniertes Zertifikat verwendet. Selbstsignierte Zertifikate sollten nicht für Produktionsszenarien verwendet werden. Sie sollten CA-Zertifikate verwenden.
Stellen Sie sicher, dass die Ordner, in denen Sie Ihre Zertifikate und privaten Schlüssel speichern, für den Benutzer oder die Gruppe mssql zugänglich sind und deren Berechtigungen auf 700 (drwx------) gesetzt sind. Du kannst Ordner manuell mit Berechtigungen auf 700 (drwx------) anlegen, die dem mssql Benutzer oder der Gruppe gehören. Alternativ setze die Berechtigungen auf 755 (drwxr-xr-x) und stelle sicher, dass die Ordner für die Gruppe mssql zugänglich sind. Zum Beispiel können Sie unter dem Pfad sslcert einen Ordner mit dem Namen /var/opt/mssql/ erstellen und das Zertifikat sowie den privaten Schlüssel in Dateien speichern, deren Berechtigungen auf 600 festgelegt sind, wie im folgenden Beispiel gezeigt.
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/
Konfigurieren von SQL Server
Für SQL Server 2022 (16.x) und frühere Versionen:
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
Registrieren des Zertifikats auf dem Clientcomputer (Windows, Linux oder macOS)
Wenn Sie ein CA-signiertes Zertifikat verwenden, kopieren Sie das Certificate Authority (CA) Zertifikat statt des Benutzerzertifikats auf den Client-Rechner.
Wenn du das selbstsignierte Zertifikat verwendest, kopiere die
.pemDatei in den Ordner für deine Distribution und führe den Befehl aus, um es zu aktivieren:Ubuntu: Kopieren Sie das Zertifikat nach
/usr/share/ca-certificates/, benennen Sie die Erweiterung in.crt, und verwendendpkg-reconfigure ca-certificatesSie es, um es als System-CA-Zertifikat zu aktivieren.RHEL: Kopieren Sie das Zertifikat nach
/etc/pki/ca-trust/source/anchors/und verwenden Sieupdate-ca-trust, um es als System-CA-Zertifikat zu aktivieren.SUSE: Kopieren Sie das Zertifikat nach
/usr/share/pki/trust/anchors/und verwenden Sieupdate-ca-certificates, um es als System-CA-Zertifikat zu aktivieren.Windows: Importieren Sie die Datei
.pemals Zertifikat unter Aktueller Benutzer>Vertrauenswürdige Stammzertifizierungsstellen>Zertifikate.macOS:
Kopiere das Zertifikat nach
/usr/local/etc/openssl/certs.Führen Sie den folgenden Befehl aus, um den Hashwert zu erhalten:
/usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -nooutBenennen Sie das Zertifikat auf den Wert um. Verwenden Sie z. B.
mv mssql.pem dc2dd900.0. Stelle sicher, dassdc2dd900.0sich in/usr/local/etc/openssl/certsbefindet.
Exemplarische Verbindungszeichenfolgen
Caution
Ihr Kennwort sollte der standardmäßigen Kennwortrichtlinie von SQL Server folgen. Standardmäßig muss das Kennwort mindestens acht Zeichen lang sein und Zeichen aus drei der folgenden vier Sätze enthalten: Großbuchstaben, Kleinbuchstaben, Basis-10 Ziffern und Symbole. Kennwörter können bis zu 128 Zeichen lang sein. Verwenden Sie möglichst lange und komplexe Kennwörter.
SQL Server Management Studio
sqlcmdsqlcmd -S <sqlhostname> -N -U sa -P '<password>'ADO.NET
"Encrypt=True; TrustServerCertificate=False;"ODBC
"Encrypt=Yes; TrustServerCertificate=no;"JDBC
"encrypt=true; trustServerCertificate=false;"
Häufige Verbindungsfehler
| Fehlermeldung | Beheben |
|---|---|
The certificate chain was issued by an authority that is not trusted. |
Dieser Fehler tritt auf, wenn Clients die Signatur des Zertifikats, das von SQL Server während des TLS-Handshakes angezeigt wird, nicht überprüfen können. Stellen Sie sicher, dass der Client entweder direkt dem SQL Server-Zertifikat vertraut, oder der Zertifizierungsstelle, die das SQL Server-Zertifikat signiert hat. |
The target principal name is incorrect. |
Stellen Sie sicher, dass das Feld für den gemeinsamen Namen im Zertifikat von SQL Server mit dem Servernamen übereinstimmt, der im Verbindungszeichenfolge des Clients angegeben ist. |
An existing connection was forcibly closed by the remote host. |
Dieser Fehler kann auftreten, wenn der Client die für SQL Server erforderliche TLS-Protokollversion nicht unterstützt. Wenn SQL Server beispielsweise für die Verwendung von TLS 1.2 konfiguriert ist, müssen Sie sicherstellen, dass Ihre Clients auch das TLS 1.2-Protokoll unterstützen. |
Ubuntu 20.04 und andere aktuelle Linux-Distributionsversionen
Symptom
Wenn eine SQL Server für Linux-Instanz ein Zertifikat lädt, das mit einem Signaturalgorithmus mit weniger als 112 Bits Sicherheit erstellt wurde (z. B. MD5, SHA-1), kann ein Verbindungsfehler auftreten, wie in diesem Beispiel:
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)
Der Fehler ist darauf zurückzuführen, dass unter Ubuntu 20.04 und höheren Versionen standardmäßig die OpenSSL-Sicherheitsstufe 2 aktiviert ist. Die Sicherheitsstufe 2 verhindert die Einrichtung von TLS-Verbindungen mit weniger als 112 Bits Sicherheit.
Lösung
Installieren Sie ein Zertifikat mit einem Signaturalgorithmus mit mindestens 112 Bits Sicherheit. Signaturalgorithmen, die diese Anforderung erfüllen, sind SHA-224, SHA-256, SHA-384 und SHA-512.