Konfigurieren der SQL Server-Datenbank-Engine zum Verschlüsseln von Verbindungen

Sie können alle eingehenden Verbindungen mit SQL Server verschlüsseln oder die Verschlüsselung nur für eine bestimmte Gruppe von Clients aktivieren. Für beide Szenarien müssen Sie SQL Server zunächst zur Verwendung eines Zertifikats konfigurieren, das die Zertifikatanforderungen für SQL Server erfüllt, bevor Sie auf dem Servercomputer oder den Clientcomputern weitere Schritte zur Verschlüsselung der Daten ausführen.

In diesem Artikel wird beschrieben, wie Sie SQL Server für Zertifikate konfigurieren (Schritt 1) und die Verschlüsselungseinstellungen der SQL Server-Instanz ändern (Schritt 2). Beide Schritte sind erforderlich, um alle eingehenden Verbindungen mit SQL Server zu verschlüsseln, wenn Sie ein Zertifikat von einer öffentlichen kommerziellen Zertifizierungsstelle verwenden. Informationen zu weiteren Szenarien finden Sie unter Sonderfälle zum Verschlüsseln von Verbindungen mit SQL Server.

Schritt 1: Konfigurieren von SQL Server zur Verwendung von Zertifikaten

Führen Sie die folgenden Schritte aus, um SQL Server zur Verwendung der in Zertifikatanforderungen für SQL Server-Verschlüsselung beschriebenen Zertifikate zu konfigurieren:

  1. Installieren Sie das Zertifikat auf dem Computer, auf dem SQL Server ausgeführt wird.
  2. Konfigurieren Sie SQL Server zur Verwendung des installierten Zertifikats.

Je nachdem, auf welche Version des SQL Server-Konfigurations-Managers Sie auf dem SQL Server-Computer Zugriff haben, verwenden Sie eines der folgenden Verfahren zum Installieren und Konfigurieren der SQL Server-Instanz.

Computer mit SQL Server-Konfigurations-Manager für SQL Server 2019 und höhere Versionen

Ab SQL Server 2019 (15.x) ist die Zertifikatverwaltung in den SQL Server-Konfiguration-Manager integriert und kann auch mit früheren Versionen von SQL Server verwendet werden. Informationen dazu, wie Sie ein Zertifikat für eine einzelne SQL Server-Instanz, in einer Konfiguration mit Failovercluster oder in einer Konfiguration mit Verfügbarkeitsgruppen hinzufügen, finden Sie unter Zertifikatverwaltung (SQL Server-Konfigurations-Manager). Der Konfigurations-Manager vereinfacht die Verwaltung von Zertifikaten erheblich, da er in einigen wenigen Schritten das Zertifikat installiert und SQL Server für die Verwendung des installierten Zertifikats konfiguriert.

Zertifikate werden lokal für diesen Benutzer auf dem Computer gespeichert. Um ein Zertifikat für SQL Server zu installieren, müssen Sie den SQL Server-Konfigurations-Manager mit einem Konto ausführen, das über Berechtigungen als lokaler Administrator verfügt.

Sie können vorübergehend eine Express-Edition von SQL Server 2019 (15.x) oder höher installieren, um den SQL Server-Konfigurations-Manager zu verwenden, der die integrierte Zertifikatverwaltung unterstützt.

Computer mit SQL Server-Konfigurations-Manager für SQL Server 2017 und früher

Wenn Sie SQL Server 2017 (14.x) oder eine frühere Version verwenden und der SQL Server-Konfiguration-Manager für SQL Server 2019 (15.x) nicht verfügbar ist, befolgen Sie diese Schritte, um das Zertifikat auf dem SQL Server-Computer zu installieren und zu konfigurieren:

  1. Klicken Sie im Menü Start auf Ausführen, geben Sie im Feld ÖffnenMMC ein, und klicken Sie auf OK.
  2. Wählen Sie in der MMC-Konsole im Menü Datei die Option Snap-In hinzufügen/entfernen... aus.
  3. Wählen Sie im Dialogfeld Snap-Ins hinzufügen oder entfernen die Option Zertifikate und dann die Option Hinzufügen aus.
  4. Wählen Sie im Dialogfeld Zertifikat-Snap-In die Option Computerkonto und dann Weiter>Fertig stellen aus.
  5. Klicken Sie im Dialogfeld Snap-Ins hinzufügen oder entfernen auf OK.
  6. Erweitern Sie in der MMC-Konsole den Eintrag Zertifikate (Lokaler Computer)>Persönlich, klicken Sie mit der rechten Maustaste auf Zertifikate, zeigen Sie auf Alle Aufgaben, und wählen Sie Importieren aus.
  7. Verwenden Sie den Zertifikatimport-Assistenten, um dem Computer ein Zertifikat hinzuzufügen.
  8. Klicken Sie in der MMC-Konsole mit der rechten Maustaste auf das importierte Zertifikat, zeigen Sie auf Alle Aufgaben, und wählen Sie Private Schlüssel verwalten aus. Fügen Sie im Dialogfeld Sicherheit die Leseberechtigung für das Benutzerkonto hinzu, das vom SQL Server-Dienstkonto verwendet wird.
  9. Erweitern Sie im SQL Server-Konfigurations-Manager die SQL Server-Netzwerkkonfiguration, klicken Sie mit der rechten Maustaste auf Protokolle für <Serverinstanz>, und wählen Sie Eigenschaften aus.
  10. Wählen Sie im Dialogfeld Protokolle für <Instanzname> – Eigenschaften auf der Registerkarte Zertifikat das gewünschte Zertifikat aus der Dropdownliste für das Feld Zertifikat aus, und klicken Sie dann auf OK.
  11. Wenn Sie möchten, dass alle Verbindungen mit SQL Server verschlüsselt werden, lesen Sie den Abschnitt Schritt 2: Konfigurieren Sie die Verschlüsselungseinstellungen in SQL Server. Wenn Sie die Verschlüsselung nur für bestimmte Clients aktivieren möchten, starten Sie den SQL Server-Dienst neu, und beachten Sie die Informationen unter Sonderfälle zum Verschlüsseln von Verbindungen mit SQL Server.

Hinweis

Um Zertifikate für eine Konfiguration mit Always On-Verfügbarkeitsgruppen zu installieren, wiederholen Sie das oben beschriebene Verfahren auf jedem Knoten in Ihrer Verfügbarkeitsgruppe.

Wichtig

Das SQL Server-Dienstkonto muss über Leseberechtigungen für das Zertifikat verfügen, das zum Erzwingen der Verschlüsselung auf der SQL Server-Instanz verwendet wird. Wenn ein nicht privilegiertes Dienstkonto verwendet wird, müssen dem Zertifikat Leseberechtigungen hinzugefügt werden. Ist dies nicht der Fall, kann beim Neustart des SQL Server-Diensts ein Fehler auftreten.

Zusätzliches Vorgehen für Failoverclusterinstanzen

Das von SQL Server zum Verschlüsseln von Verbindungen verwendete Zertifikat wird im folgenden Registrierungsschlüssel angegeben:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\SuperSocketNetLib\Certificate

Dieser Schlüssel umfasst eine als Fingerabdruck bezeichnete Zertifikateigenschaft, mit der jedes auf dem Server vorhandene Zertifikat identifiziert wird. In einer Clusterumgebung wird dieser Schlüssel auch dann auf Null festgelegt, wenn das richtige Zertifikat im Speicher vorhanden ist. Um dieses Problem zu beheben, müssen Sie die folgenden zusätzlichen Schritte für jeden Ihrer Clusterknoten durchführen, nachdem Sie das Zertifikat auf jedem Knoten installiert haben:

  1. Navigieren Sie zu dem Zertifikatspeicher, in dem das FQDN-Zertifikat gespeichert ist. Wechseln Sie auf der Eigenschaftenseite des Zertifikats zur Registerkarte Details, und kopieren Sie den Fingerabdruckwert des Zertifikats in ein Editor-Fenster.

  2. Entfernen Sie im Editor die Leerzeichen zwischen den Hexadezimalzeichen im Wert des Fingerabdrucks.

  3. Starten Sie den Registrierungs-Editor, navigieren Sie zum folgenden Registrierungsschlüssel, und kopieren Sie den Wert aus Schritt 2:

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate

  4. Wenn sich der virtuelle SQL-Server derzeit auf diesem Knoten befindet, führen Sie ein Failover auf einen anderen Knoten in Ihrem Cluster durch, und starten Sie den Knoten neu, auf dem die Registrierungsänderung vorgenommen wurde.

  5. Wiederholen Sie dieses Verfahren für alle Knoten.

Warnung

Ein fehlerhaftes Bearbeiten der Registrierung kann eine schwerwiegende Beschädigung des Systems zur Folge haben. Bevor Sie Änderungen an der Registrierung vornehmen, sollten Sie alle wichtigen Daten auf dem Computer sichern.

Hinweis

SQL Server 2008 R2 (10.50.x) und SQL Server 2008 R2 (10.50.x) Native Client (SNAC) unterstützen Platzhalterzertifikate. SNAC wurde als veraltet markiert und durch den Microsoft OLE DB-Treiber für SQL Server und Microsoft ODBC Driver for SQL Server ersetzt. Andere Clients unterstützen möglicherweise keine Platzhalterzertifikate.

Platzhalterzertifikate können nicht mit dem SQL Server-Konfigurations-Manager ausgewählt werden. Sie müssen den Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib bearbeiten und den Fingerabdruck des Zertifikats ohne Leerraum zum Wert des Zertifikats hinzufügen, um ein Platzhalterzertifikat zu verwenden.

Hinweis

Wenn Sie die Verschlüsselung bei einem Failovercluster verwenden möchten, müssen Sie das Serverzertifikat mit dem vollqualifizierten DNS-Namen des virtuellen Servers auf allen Knoten im Failovercluster installieren. Sie können den Wert der Option ForceEncryption im Eigenschaftsfeld Protokolle für virtsql von SQL Server-Netzwerkkonfiguration auf Ja setzen.

Wenn Sie verschlüsselte Verbindungen zwischen einem Azure Search-Indexer und SQL Server auf einer Azure-VM erstellen möchten, lesen Sie bitte Indexerverbindungen mit einer SQL Server-Instanz auf einem virtuellen Azure-Computer.

Schritt 2: Konfigurieren der Verschlüsselungseinstellungen in SQL Server

Die folgenden Schritte sind nur erforderlich, wenn Sie die verschlüsselte Kommunikation für alle Clients erzwingen möchten:

  1. Erweitern Sie im SQL Server-Konfigurations-Manager die SQL Server-Netzwerkkonfiguration, klicken Sie mit der rechten Maustaste auf Protokolle für <Serverinstanz>, und wählen Sie dann Eigenschaften aus.
  2. Klicken Sie auf der Registerkarte Flags im Feld ForceEncryption auf Ja und anschließend auf OK, um das Dialogfeld zu schließen.
  3. Starten Sie den SQL Server-Dienst neu.

Hinweis

In einigen Zertifikatszenarien müssen Sie möglicherweise zusätzliche Schritte auf dem Clientcomputer und in Ihrer Clientanwendung ausführen, um verschlüsselte Verbindungen zwischen dem Client und dem Server zu gewährleisten. Weitere Informationen finden Sie unter Sonderfälle zum Verschlüsseln von Verbindungen mit SQL Server.

Weitere Informationen

Anmeldepaketverschlüsselung im Vergleich zur Datenpaketverschlüsselung

Allgemein betrachtet umfasst der Netzwerkdatenverkehr zwischen einer SQL Server-Clientanwendung und SQL Server zwei Pakettypen: Pakete mit Anmeldeinformationen (Anmeldepakete) und Datenpakete. Wenn Sie die Verschlüsselung konfigurieren (entweder serverseitig oder clientseitig), werden diese beiden Pakettypen immer verschlüsselt. Aber selbst wenn Sie die Verschlüsselung nicht konfigurieren, werden Anmeldeinformationen (im Anmeldepaket), die beim Herstellen einer Verbindung zwischen einer Clientanwendung und SQL Server übertragen werden, immer verschlüsselt. SQL Server verwendet ein Zertifikat, das (sofern verfügbar) die Zertifikatanforderungen einer vertrauenswürdigen Zertifizierungsstelle erfüllt. Dieses Zertifikat wird entweder (über eines der zuvor in diesem Artikel beschriebenen Verfahren) manuell durch den Systemadministrator konfiguriert oder liegt im Zertifikatspeicher auf dem SQL Server-Computer vor.

Von SQL Server generierte selbstsignierte Zertifikate

SQL Server verwendet für die Verschlüsselung von Anmeldepaketen ein Zertifikat einer vertrauenswürdigen Zertifizierungsstelle (sofern verfügbar). Wenn kein vertrauenswürdiges Zertifikat installiert ist, generiert SQL Server während des Starts ein selbstsigniertes Zertifikat (Fallbackzertifikat) und verwendet dieses selbstsignierte Zertifikat zum Verschlüsseln der Anmeldeinformationen. Dieses selbstsignierte Zertifikat erhöht die Sicherheit, schützt aber nicht vor einem Identitätsspoofing durch den Server. Wenn das selbstsignierte Zertifikat verwendet wird und der Wert der Option ForceEncryption auf Yes festgelegt ist, werden alle über ein Netzwerk zwischen SQL Server und der Clientanwendung übertragenen Daten mit dem selbstsignierten Zertifikat verschlüsselt.

Wenn Sie ein selbstsigniertes Zertifikat verwenden, protokolliert SQL Server die folgende Meldung im Fehlerprotokoll:

Ein selbst generiertes Zertifikat wurde erfolgreich für die Verschlüsselung geladen.

SQL Server 2016 (13.x) und frühere Versionen verwenden den SHA1-Algorithmus. Der SHA1-Algorithmus und viele ältere Algorithmen werden jedoch ab SQL Server 2016 (13.x) als veraltet eingestuft. Weitere Informationen finden Sie unter Als veraltet markierte Funktionen der Datenbank-Engine in SQL Server 2016.

Wenn Sie in diesen Umgebungen das automatisch von SQL Server generierte selbstsignierte Zertifikat verwenden (entweder nur für den Handshake vor der Anmeldung oder für die Verschlüsselung der gesamten Kommunikation zwischen Server und Client), wird dieses Zertifikat von Ihrer Software zur Erkennung von Sicherheitsrisiken, Ihrer Sicherheitssoftware oder Ihren Unternehmensrichtlinien möglicherweise als Sicherheitsproblem eingestuft. In einem solchen Fall haben Sie folgende Möglichkeiten:

  • Erstellen Sie ein neues selbstsigniertes Zertifikat oder ein Zertifikat eines Drittanbieters, das stärkere Verschlüsselungsalgorithmen verwendet, und konfigurieren Sie SQL Server für die Verwendung dieses neuen Zertifikats.
  • Da Sie nun die Ursache für die Kennzeichnung kennen, können Sie die Meldung ignorieren (nicht empfohlen).
  • Führen Sie ein Upgrade auf SQL Server 2017 (14.x) oder eine höhere Version durch, die einen stärkeren Hashalgorithmus (SHA256) für selbstsignierte Zertifikate verwendet.

PowerShell-Skript zum Erstellen eines selbstsignierten Zertifikats für SQL Server

Mit dem folgenden Codeschnipsel können Sie ein selbstsigniertes Zertifikat für einen Computer erstellen, auf dem SQL Server ausgeführt wird. Das Zertifikat erfüllt die Verschlüsselungsanforderungen für eine eigenständige SQL Server-Instanz und wird im Zertifikatspeicher des lokalen Computers gespeichert (PowerShell muss als Administrator gestartet werden):

New-SelfSignedCertificate -Type SSLServerAuthentication -Subject "CN=$env:COMPUTERNAME" `
-DnsName ("{0}" -f [System.Net.Dns]::GetHostByName($env:computerName).HostName),'localhost' `
-KeyAlgorithm "RSA" -KeyLength 2048 -HashAlgorithm "SHA256" -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.1" `
-NotAfter (Get-Date).AddMonths(36) -KeySpec KeyExchange -Provider "Microsoft RSA SChannel Cryptographic Provider" `
-CertStoreLocation "cert:\LocalMachine\My"

Überprüfen der Netzwerkverschlüsselung

Führen Sie die folgende Transact-SQL-Abfrage aus, um zu überprüfen, ob die Netzwerkverschlüsselung konfiguriert und erfolgreich aktiviert wurde:

USE [master]
GO
SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections;
GO

Die Spalte encrypt_option enthält einen booleschen Wert, der angibt, ob die Verschlüsselung für diese Verbindung aktiviert ist. Wenn der Wert TRUE lautet, wird die Verbindung sicher verschlüsselt. Wenn der Wert FALSE lautet, wird die Verbindung nicht verschlüsselt.

Verhalten von SQL Server-Zertifikaten mit Berechtigungen

Der SQL Server-Dienst erkennt und verwendet das Zertifikat automatisch für die Verschlüsselung, wenn alle folgenden Bedingungen erfüllt sind:

  • Das Zertifikat hat einen Betreff, der den FQDN des Computers enthält.
  • Das Zertifikat ist im Zertifikatspeicher des lokalen Computers installiert.
  • Dem SQL Server-Dienstkonto wurde Zugriff auf den privaten Schlüssel des Zertifikats gewährt.

Das Zertifikat wird auch denn verwendet, wenn es im SQL Server-Konfigurations-Manager nicht ausgewählt ist.

Dieses Verhalten können Sie auf eine der folgenden Arten außer Kraft zu setzen:

  • Konfigurieren Sie ein anderes zu verwendendes Zertifikat im SQL Server-Konfigurations-Manager

    oder

  • Entfernen Sie die Berechtigungen des SQL Server-Dienstkontos für das unerwünschte Zertifikat