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.
In diesem Artikel werden die Zertifikatanforderungen für SQL Server und die Überprüfung beschrieben, ob ein Zertifikat diese Anforderungen erfüllt.
Zertifikatanforderungen für SQL Server Verschlüsselung
Für die Verwendung von Transport Layer Security (TLS) für SQL Server Verschlüsselung müssen Sie ein Zertifikat (eines der drei digitalen Typen) bereitstellen, das die folgenden Bedingungen erfüllt:
Das Zertifikat muss sich entweder im zertifikatspeicher des lokalen Computers oder im Zertifikatspeicher des SQL Server Dienstkontos befinden. Verwenden Sie den zertifikatspeicher des lokalen Computers, um zu vermeiden, dass Zertifikate neu konfiguriert werden, wenn sich das SQL Server Startkonto ändert.
Das SQL Server-Dienstkonto muss über die erforderliche Berechtigung für den Zugriff auf das TLS-Zertifikat verfügen. Weitere Informationen finden Sie unter Encrypt-Verbindungen mit SQL Server durch Importieren eines Zertifikats.
Die aktuelle Systemzeit muss nach dem Wert der Eigenschaft "Valid from" und vor dem Wert der Eigenschaft "Valid to" des Zertifikats liegen. Weitere Informationen finden Sie unter "Abgelaufene Zertifikate".
Hinweis
Das Zertifikat muss für die Serverauthentifizierung vorgesehen sein. Dazu muss die Eigenschaft "Enhanced Key Usage " des Zertifikats die Serverauthentifizierung (1.3.6.1.5.5.7.3.1) angeben.
Das Zertifikat muss mit der
KeySpec-Option vonAT_KEYEXCHANGEerstellt werden. Dies erfordert ein Zertifikat, das einen älteren kryptografischen Speicheranbieter zum Speichern des privaten Schlüssels verwendet. In der Regel umfasst die Schlüsselverwendungseigenschaft (KEY_USAGE) des Zertifikats auch schlüsselbasierte Enzipherierung (CERT_KEY_ENCIPHERMENT_KEY_USAGE) und eine digitale Signatur (CERT_DIGITAL_SIGNATURE_KEY_USAGE).Der Subject Alternative Name sollte alle Namen enthalten, die Ihre Clients zum Herstellen einer Verbindung mit einer SQL Server Instanz verwenden können.
Der Client muss in der Lage sein, den Besitz des vom Server verwendeten Zertifikats zu überprüfen. Wenn der Client über das Öffentliche Schlüsselzertifikat der Zertifizierungsstelle verfügt, die das Serverzertifikat signiert hat, ist keine weitere Konfiguration erforderlich. Microsoft Windows enthält die Öffentlichen Schlüsselzertifikate vieler Zertifizierungsstellen. Wenn das Serverzertifikat von einer öffentlichen oder privaten Zertifizierungsstelle signiert wurde, für die der Client nicht über das Öffentliche Schlüsselzertifikat verfügt, müssen Sie das Öffentliche Schlüsselzertifikat der Zertifizierungsstelle installieren, die das Serverzertifikat auf jedem Client signiert hat, der eine Verbindung mit SQL Server herstellen soll.
Wichtig
SQL Server wird nicht gestartet, wenn ein Zertifikat im Computerspeicher vorhanden ist, aber nur einige Anforderungen in der obigen Liste erfüllt und wenn es manuell für die Verwendung durch SQL Server Configuration Manager oder durch Registrierungseinträge konfiguriert ist. Wählen Sie ein anderes Zertifikat aus, das alle Anforderungen erfüllt, oder entfernen Sie das Zertifikat, das von SQL Server verwendet wird, bis Sie ein Zertifikat bereitstellen können, das die Anforderungen erfüllt oder ein selbst generiertes Zertifikat verwenden kann, wie in SQL Server generierten selbstsignierten Zertifikaten beschrieben.
AlwaysOn-Verfügbarkeitsgruppe
Wenn Ihre SQL Server Instanz Teil einer Always On availability group ist, können Sie eine der folgenden Methoden verwenden, um Ihr Zertifikat zu erstellen:
Methode 1: Verwenden Sie ein Zertifikat für alle Replikate der Verfügbarkeitsgruppe. Der allgemeine Name ist willkürlich wählbar und kann daher jeden beliebigen Platzhalterwert annehmen. Der Hostname und der FQDN aller SQL Server Replikate in der Verfügbarkeitsgruppe und die Namen der Verfügbarkeitsgruppenlistener sollten im Subject Alternativer Name des Zertifikats enthalten sein. Wenn der Verfügbarkeitsgruppe zusätzliche Replikate hinzugefügt werden, nachdem das ursprüngliche Zertifikat generiert wurde, muss das Zertifikat mit den Namen aller Replikate neu generiert und in jedes Replikat neu importiert werden. Das Zertifikat muss auch in den Zertifikatspeicher auf allen Clients importiert werden, die eine Verbindung mit dem Verfügbarkeitsgruppenreplikat oder dem Verfügbarkeitsgruppenlistener herstellen, es sei denn, das Zertifikat ist von einer öffentlichen oder offiziellen Zertifizierungsstelle (Ca) signiert. Wenn Sie die Verfügbarkeitsgruppenreplikate und Listenernamen nicht in das Zertifikat einschließen, müssen Sie einen der Werte des Subject Alternativer Name im
HostNameInCertificateoder den Pfad zum Zertifikat in die WerteServerCertificatedes connection string einschließen, wenn sie eine Verbindung mit der Verfügbarkeitsgruppe herstellen. Das Angeben von Namen im Zertifikat ist der empfohlene Ansatz.Im Folgenden sehen Sie ein Beispiel für die Eigenschaften, die ein ordnungsgemäß konfiguriertes Zertifikat für eine Verfügbarkeitsgruppe mit zwei Servern mit dem Namen
test1.<your company>.comundtest2.<your company>.comdem Namen eines Verfügbarkeitsgruppenlistenersaglistener.<your company>.comdefinieren:CN = <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager> DNS Name = aglistener.<your company>.com DNS Name = test1.<your company>.com DNS Name = test2.<your company>.com DNS Name = aglistener DNS Name = test1 DNS Name = test2Methode 2: Verwenden Sie für jedes Replikat der Verfügbarkeitsgruppe ein separates Zertifikat. Das Hinzufügen von Replikaten zu einer Verfügbarkeitsgruppe nach dem Generieren eines Zertifikats ist einfacher, wenn Sie separate Zertifikate verwenden, da Sie nur ein Zertifikat für das neue Replikat generieren müssen, anstatt alle Zertifikate für alle vorhandenen Replikate zu ändern. Der allgemeine Name ist willkürlich wählbar und kann daher jeden beliebigen Platzhalterwert annehmen. Der Hostname und der FQDN der jeweiligen SQL Server-Instanz sowie die Listener-Namen der Verfügbarkeitsgruppe müssen im Subject Alternative Name des Zertifikats für jede jeweilige Replik enthalten sein. Importieren Sie jedes Zertifikat in das jeweilige Replikat, und, es sei denn, das Zertifikat wird von einer öffentlichen oder offiziellen Zertifizierungsstelle (CA) unterzeichnet, importieren Sie dann sämtliche Zertifikate in alle Zertifikatspeicher auf allen Clients, die eine Verbindung mit den Replikaten herstellen, oder mit dem Listenendpunkt für Verfügbarkeitsgruppen.
Im Folgenden sind Beispiele für die Eigenschaften aufgeführt, die ordnungsgemäß konfigurierte Zertifikate für eine Verfügbarkeitsgruppe mit zwei Instanzen mit dem Namen
test1.<your company>.comundtest2.<your company>.comdem Namen eines Verfügbarkeitsgruppenlistenersaglistener.<your company>.comdefinieren:Zertifikat für Test1
CN= <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager> DNS Name= test1.<your company>.com DNS Name= aglistener.<your company>.com DNS Name= aglistener DNS Name= test1Zertifikat für Test 2:
CN= <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager> DNS Name= test2.<your company>.com DNS Name= aglistener.<your company>.com DNS Name= aglistener DNS Name= test2
Failoverclusterinstanz
Wenn SQL Server als failover-Clusterinstanz konfiguriert ist, müssen Sie das Serverzertifikat mit dem Hostnamen oder vollqualifizierten DNS-Namen (FQDN) des virtuellen Servers auf allen Knoten im Failovercluster installieren. und die Zertifikate müssen auf allen Knoten des Failoverclusters bereitgestellt werden. Wenn Sie zum Beispiel über einen Cluster mit zwei Knoten verfügen, wobei die Knoten test1.<your company>.com und test2.<your company>.com benannt sind, und einen virtuellen Server mit dem Namen virtsql haben, müssen Sie auf beiden Knoten ein Zertifikat für virtsql.<your company>.com installieren.
Importieren Sie das Zertifikat in der in SQL Server-Datenbankmodul für die Verschlüsselung von Verbindungen konfigurieren dokumentierten Reihenfolge.
Nachfolgend sehen Sie ein Beispiel für die Eigenschaften, die ein ordnungsgemäß konfiguriertes Zertifikat für eine Failoverclusterinstanz definieren:
CN = virtsql.<your company>.com
DNS Name = virtsql.<your company>.com
DNS Name = virtsql
Weitere Informationen zu SQL-Clustern finden Sie unter Vor der Installation des Failover-Clusterings.
Überprüfen, ob ein Zertifikat die Anforderungen erfüllt
In SQL Server 2019 (15.x) und höheren Versionen überprüft SQL Server Configuration Manager automatisch alle Zertifikatanforderungen während der Konfigurationsphase selbst. Wenn SQL Server nach der Konfiguration eines Zertifikats erfolgreich gestartet wird, ist es ein guter Hinweis darauf, dass SQL Server dieses Zertifikat verwenden kann. Einige Clientanwendungen verfügen jedoch möglicherweise noch über andere Anforderungen für Zertifikate, die für die Verschlüsselung verwendet werden können, und Je nach verwendeter Anwendung treten möglicherweise unterschiedliche Fehler auf. In diesem Szenario müssen Sie die Supportdokumentation der Clientanwendung überprüfen, um weitere Informationen zum Thema zu erhalten.
Überprüfung der KeySpec und der Schlüsselverwendung
Die KeySpec Anforderung (AT_KEYEXCHANGE) ist eine häufige Ursache für Zertifikatkonfigurationsfehler. Verwenden Sie die folgenden Methoden, um zu überprüfen, ob Ihr Zertifikat diese Anforderung erfüllt.
Verwenden von Certutil
Führen Sie certutil mit der Option -v aus, um detaillierte Eigenschaften des Zertifikats anzuzeigen, einschließlich KeySpec und Key Usage:
certutil -v -store My "<certificate_thumbprint>"
Suchen Sie in der Ausgabe nach den folgenden Werten:
KeySpec = 1 -- AT_KEYEXCHANGE
Key Usage = Key Encipherment, Digital Signature (a0)
Enhanced Key Usage:
Server Authentication (1.3.6.1.5.5.7.3.1)
Wenn KeySpec = 2 (AT_SIGNATURE) nicht verwendet werden kann, kann das Zertifikat nicht für die Verschlüsselung des SQL Servers verwendet werden.
Verwenden von PowerShell
Führen Sie die folgenden PowerShell-Befehle aus, um im lokalen Computerspeicher nach Zertifikaten zu suchen KeySpec :
Get-ChildItem Cert:\LocalMachine\My | ForEach-Object {
$cert = $_
$key = $cert.PrivateKey
[PSCustomObject]@{
Subject = $cert.Subject
Thumbprint = $cert.Thumbprint
KeySpec = if ($key) { $key.CspKeyContainerInfo.KeyNumber } else { 'No private key' }
NotAfter = $cert.NotAfter
}
} | Format-Table -AutoSize
Überprüfen Sie, ob KeySpecExchange anzeigt (entsprechend AT_KEYEXCHANGE). Wenn es angezeigt wird Signature, fordern Sie ein neues Zertifikat mit der richtigen KeySpec Einstellung an.
Erstellen eines Zertifikats mithilfe von AD CS
Wenn Ihre Organisation Active Directory Zertifikatdienste (AD CS) als interne Zertifizierungsstelle (CA) verwendet, erstellen Sie ein Zertifikat, das SQL Server Anforderungen erfüllt, indem Sie die folgenden Schritte ausführen:
- Öffnen Sie das MMC-Snap-In "Zertifikate" für den lokalen Computer (
certlm.msc). - Erweitern Sie "Persönlich", klicken Sie mit der rechten Maustaste auf "Zertifikate", und wählen Sie "Alle Aufgaben>anfordern neues Zertifikat" aus.
- Wählen Sie Active Directory Registrierungsrichtlinie aus, und wählen Sie Next aus.
- Wählen Sie eine Zertifikatvorlage aus, die die Serverauthentifizierung unterstützt. Ein Webserver oder eine benutzerdefinierte Vorlage, die für die Serverauthentifizierung konfiguriert ist, erfüllt in der Regel die Anforderungen. Stellen Sie sicher, dass Ihr CA-Administrator überprüft, ob die Vorlage einen älteren kryptografischen Dienstanbieter (CSP) mit
KeySpec = AT_KEYEXCHANGEstatt eines Schlüsselspeicheranbieters (Key Storage Provider, KSP) verwendet. - Auf der Seite Zertifikateigenschaften:
- Legen Sie den Common Name (CN) auf den Hostnamen oder den FQDN Ihrer SQL Server Instanz fest.
- Fügen Sie auf der Registerkarte " Alternativer Antragstellername " DNS-Einträge für alle Hostnamen hinzu, die Clients für die Verbindung verwenden (Hostname, FQDN und alle Aliase).
- Schließen Sie den Registrierungs-Assistenten ab, und überprüfen Sie, ob das neue Zertifikat in persönlichen>Zertifikaten angezeigt wird.
- Überprüfen Sie die
KeySpecMithilfe von Certutil oder PowerShell, wie unter "Überprüfen von KeySpec" und "Key Usage" beschrieben.
Wichtig
Zertifikate, die mit einem Key Storage Provider (KSP) erstellt wurden, z. B. dem Microsoft Software Key Storage Provider, verwenden KeySpec = 0 und sind nicht mit SQL Server kompatibel. Wenn Sie Ihre Zertifikatvorlage in AD CS erstellen, wählen Sie einen älteren CSP wie Microsoft RSA SChannel Cryptographic Provider aus, um sicherzustellen KeySpec = AT_KEYEXCHANGE.
Sie können eine der folgenden Methoden verwenden, um die Gültigkeit des Zertifikats für die Verwendung mit SQL Server zu überprüfen:
sqlcheck tool:
sqlcheckist ein Befehlszeilentool, das die aktuellen Computer- und Dienstkontoeinstellungen untersucht und einen Textbericht an das Konsolenfenster erstellt, das für die Problembehandlung verschiedener Verbindungsfehler nützlich ist. Die Ausgabe enthält die folgenden Informationen zu Zertifikaten:Details for SQL Server Instance: This Certificate row in this section provides more details regarding the certificate being used by SQL Server (Self-generated, hard-coded thumbprint value, etc.). Certificates in the Local Computer MY Store: This section shows detailed information regarding all the certificates found in the computer certificate store.Weitere Informationen zu den Funktionen des Tools und zum Herunterladen von Anweisungen finden Sie unter "Willkommen beim CSS_SQL_Networking_Tools Wiki".
certutil tool:
certutil.exeist ein Befehlszeilenprogramm, das als Teil der Zertifikatdienste installiert ist. Sie können certutil.exe verwenden, um Zertifikatinformationen auszugeben und anzuzeigen. Verwenden Sie die-vOption, um detaillierte Informationen zu erhalten. Weitere Informationen finden Sie unter certutil.Zertifikat-Snap-In: Sie können auch das Snap-In "-Fenster "Zertifikate" verwenden, um weitere Informationen zu Zertifikaten in verschiedenen Zertifikatspeichern auf dem Computer anzuzeigen. Dieses Tool zeigt jedoch keine
KeySpec-Informationen an. Weitere Informationen zum Anzeigen von Zertifikaten mit dem MMC-Snap-In finden Sie unter How to: View certificates with the MMC snap-in.
Importieren eines Zertifikats mit einem anderen Namen für den Hostnamen
Derzeit können Sie ein Zertifikat nur mithilfe des SQL Server Configuration Managers importieren, wenn der Betreffname des Zertifikats mit dem Hostnamen des Computers übereinstimmt.
Wenn Sie ein Zertifikat mit einem anderen Betreffnamen verwenden möchten, führen Sie die folgenden Schritte aus:
Importieren Sie das Zertifikat mithilfe des Snap-Ins "Zertifikate" in den Zertifikatspeicher des lokalen Computers.
Erweitern Sie in SQL Server Configuration Manager SQL Server Netzwerkkonfiguration, und klicken Sie mit der rechten Maustaste auf die Instanz von SQL Server, und wählen Sie dann Eigenschaften aus, um das Dialogfeld Protokolle für <instance_name> Eigenschaften zu öffnen.
Wählen Sie auf der Registerkarte " Zertifikat " das Zertifikat aus, das Sie aus der Dropdownliste " Zertifikat " in den Zertifikatspeicher importiert haben:
Wenn Sie ein Zertifikat mit einem anderen Namen in den Hostnamen importieren, wird die folgende Fehlermeldung angezeigt:
The selected certificate name does not match FQDN of this hostname. This property is required by SQL Server
Certificate name: random-name
Computer name: sqlserver.domain.com
Abgelaufene Zertifikate
SQL Server überprüft nur die Gültigkeit der Zertifikate zum Zeitpunkt der Konfiguration. Sie können z. B. SQL Server Configuration Manager auf SQL Server 2019 (15.x) und höheren Versionen nicht verwenden, um ein abgelaufenes Zertifikat bereitzustellen. SQL Server wird weiterhin ohne Probleme ausgeführt, wenn das Zertifikat abläuft, nachdem es bereits bereitgestellt wurde. Einige Clientanwendungen wie Power BI überprüfen jedoch die Gültigkeit des Zertifikats für jede Verbindung und lösen einen Fehler aus, wenn die SQL Server Instanz so konfiguriert ist, dass ein abgelaufenes Zertifikat für die Verschlüsselung verwendet wird. Es wird empfohlen, kein abgelaufenes Zertifikat für SQL Server Verschlüsselung zu verwenden.
Nächster Schritt
- Konfigurieren Sie die SQL Server Database Engine zum Verschlüsseln von Verbindungen durch Importieren eines Zertifikats.