Verschlüsseln von Verbindungen mit SQL Server unter Linux

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 der Valid to-Eigenschaft des Zertifikats liegen.

  • Das Zertifikat muss für die Serverauthentifizierung vorgesehen sein. Dazu muss die Enhanced Key Usage-Eigenschaft des Zertifikats Server Authentication (1.3.6.1.5.5.7.3.1) spezifizieren.

  • Das Zertifikat muss mithilfe der KeySpec-Option von AT_KEYEXCHANGE erstellt werden. Normalerweise enthält die Schlüsselverwendungseigenschaft (KEY_USAGE) des Zertifikats auch die Schlüsselverschlüsselung (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Mit der Eigenschaft Subject des 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 .pem Datei 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 verwenden dpkg-reconfigure ca-certificates Sie es, um es als System-CA-Zertifikat zu aktivieren.

    • RHEL: Kopieren Sie das Zertifikat nach /etc/pki/ca-trust/source/anchors/ und verwenden Sie update-ca-trust, um es als System-CA-Zertifikat zu aktivieren.

    • SUSE: Kopieren Sie das Zertifikat nach /usr/share/pki/trust/anchors/ und verwenden Sie update-ca-certificates, um es als System-CA-Zertifikat zu aktivieren.

    • Windows: Importieren Sie die Datei .pem als 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 -noout
        
      • Benennen Sie das Zertifikat auf den Wert um. Verwenden Sie z. B. mv mssql.pem dc2dd900.0. Stelle sicher, dass dc2dd900.0 sich in /usr/local/etc/openssl/certs befindet.

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

    Screenshot des Verbindungsdialogs von 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;"

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.