Verschlüsselung und Zertifikatsüberprüfung in Microsoft.Data.SqlClient
SQL Server verschlüsselt stets Netzwerkpakete, die mit der Anmeldung verbunden sind. Wenn auf dem Server beim Start kein Zertifikat bereitgestellt wird, erstellt SQL Server ein selbstsigniertes Zertifikat, mit dem Anmeldungspakete verschlüsselt werden.
Ganz allgemein stellt die Verschlüsselung zwischen einem Client und einem Server sicher, dass Daten nur vom Client und vom Server gelesen werden können. Ein wichtiger Bestandteil des Verschlüsselungsprozesses ist die Überprüfung des Serverzertifikats. Die Überprüfung des Serverzertifikats ermöglicht dem Client sicherzustellen, dass der Server der ist, als der er sich ausgibt. Das Zertifikat wird auf Informationen wie Ablauf, Vertrauenskette und Übereinstimmung des Namens im Zertifikat mit dem Namen des Servers überprüft, mit dem der Client eine Verbindung herstellt. Weitere Informationen finden Sie unter Transport Layer Security und digitale Zertifikate.
Sie sollten für eine sichere Konnektivität unbedingt ein verifizierbares Zertifikat für SQL Server bereitstellen. Transport Layer Security (TLS) kann nur mit einer Zertifikatüberprüfung gesichert werden.
Anwendungen erfordern möglicherweise auch die Verschlüsselung des gesamten Netzwerkdatenverkehrs mit dem Schlüsselwort Encrypt
in Verbindungszeichenfolgen oder Verbindungseigenschaften. Standardmäßig ist für die Verschlüsselung des Netzwerkverkehrs über eine Verbindung die Bereitstellung eines Zertifikats auf dem Server erforderlich. Wenn Sie festlegen, dass Ihr Client dem Zertifikat auf dem Server vertraut, werden Sie möglicherweise anfällig für Man-in-the-Middle-Angriffe. Wenn Sie ein überprüfbares Zertifikat auf dem Server bereitstellen, stellen Sie sicher, dass die Clienteinstellungen Encrypt
den Wert True
und die Einstellungen Trust Server Certificate
den Wert False
aufweisen.
Um die Verschlüsselung zu aktivieren, die verwendet werden soll, wenn kein Zertifikat auf dem Server bereitgestellt wurde, können die Clienteinstellungen Encrypt
und Trust Server Certificate
verwendet werden. In diesem Fall verwendet die Verschlüsselung ein selbstsigniertes Serverzertifikat ohne Überprüfung durch den Client. Diese Konfiguration verschlüsselt die Verbindung, verhindert aber nicht, dass Geräte zwischen Client und Server die Verbindung abfangen und einen Verschlüsselungsproxy zwischenschalten können.
Änderungen beim Verschlüsselungs- und Zertifikatsüberprüfungsverhalten
In Version 4.0 von Microsoft.Data.SqlClient wurden Breaking Changes bei den Verschlüsselungseinstellungen eingeführt. Der Standardwert von Encrypt
ist jetzt True
.
In Version 2.0 von Microsoft.Data.SqlClient wurden Breaking Changes beim Verhalten der Einstellung Trust Server Certificate
eingeführt. Wenn zuvor Encrypt
auf False
festgelegt war, wurde das Serverzertifikat unabhängig von der Einstellung Trust Server Certificate
nicht überprüft. Nun wird das Serverzertifikat basierend auf der Einstellung Trust Server Certificate
überprüft, wenn der Server die Verschlüsselung erzwingt, selbst wenn Encrypt
auf False
festgelegt ist.
Version 4.0
In der folgenden Tabelle werden die Ergebnisse der Verschlüsselung und Validierung für Verschlüsselungs- und Zertifikatseinstellungen beschrieben:
Clienteinstellung Encrypt |
Clienteinstellung Trust Server Certificate |
Servereinstellung Force encryption |
Ergebnis |
---|---|---|---|
False | False (Standardwert) | Nein | Die Verschlüsselung erfolgt nur für LOGIN-Pakete. Das Zertifikat wird nicht überprüft. |
False | False (Standardwert) | Ja | (Änderung beim Verhalten zwischen Version 1.0 und 2.0) Die Verschlüsselung des gesamten Netzwerkdatenverkehrs erfolgt nur, wenn ein überprüfbares Serverzertifikat vorhanden ist. Andernfalls hat der Verbindungsversuch keinen Erfolg. |
False | True | Yes | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, und das Zertifikat wird nicht überprüft. |
TRUE (neuer Standardwert) | False (Standardwert) | – | Die Verschlüsselung des gesamten Netzwerkdatenverkehrs erfolgt nur, wenn ein überprüfbares Serverzertifikat vorhanden ist. Andernfalls hat der Verbindungsversuch keinen Erfolg. |
TRUE (neuer Standardwert) | True | – | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, aber das Zertifikat wird nicht überprüft. |
Strict (hinzugefügt in Version 5.0) | – | – | Die Verschlüsselung des gesamten Netzwerkdatenverkehrs mit TDS 8 erfolgt nur, wenn ein überprüfbares Serverzertifikat vorhanden ist. Andernfalls hat der Verbindungsversuch keinen Erfolg. |
Achtung
In der obigen Tabelle finden Sie lediglich einen Leitfaden für das Systemverhalten unter verschiedenen Konfigurationen. Für eine sichere Konnektivität müssen Sie dafür sorgen, dass sowohl der Client als auch der Server die Verschlüsselung erzwingen. Sorgen Sie außerdem dafür, dass der Server über ein verifizierbares Zertifikat verfügt und dass die Einstellung TrustServerCertificate
für den Client auf False
festgelegt ist.
Ab Version 5.0 von Microsoft.Data.SqlClient ist HostNameInCertificate
eine neue Verbindungsoption. Durch die Überprüfung der Serverzertifikate wird sichergestellt, dass der Common Name (CN) oder Subject Alternate Name (SAN) im Zertifikat mit dem Servernamen der Verbindung übereinstimmt. In einigen Fällen wie DNS-Aliasen entspricht der Servername möglicherweise nicht dem CN oder SAN. Der Wert für HostNameInCertificate
kann verwendet werden, um einen anderen erwarteten CN oder SAN im Serverzertifikat anzugeben.
Version 2.0
Ab Version 2.0 überprüft der Client das Serverzertifikat unabhängig von der Einstellung Encrypt
gemäß der Einstellung Trust Server Certificate
, wenn der Server die Verschlüsselung erzwingt.
In der folgenden Tabelle werden die Ergebnisse der Verschlüsselung und Validierung für Verschlüsselungs- und Zertifikatseinstellungen beschrieben:
Clienteinstellung Encrypt |
Clienteinstellung Trust Server Certificate |
Servereinstellung Force encryption |
Ergebnis |
---|---|---|---|
False (Standardwert) | False (Standardwert) | Nein | Die Verschlüsselung erfolgt nur für LOGIN-Pakete. Das Zertifikat wird nicht überprüft. |
False (Standardwert) | False (Standardwert) | Ja | (Änderung beim Verhalten) Die Verschlüsselung des gesamten Netzwerkdatenverkehrs erfolgt nur, wenn ein überprüfbares Serverzertifikat vorhanden ist. Andernfalls hat der Verbindungsversuch keinen Erfolg. |
False (Standardwert) | True | Yes | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, und das Zertifikat wird nicht überprüft. |
True | False (Standardwert) | – | Die Verschlüsselung des gesamten Netzwerkdatenverkehrs erfolgt nur, wenn ein überprüfbares Serverzertifikat vorhanden ist. Andernfalls hat der Verbindungsversuch keinen Erfolg. |
True | True | – | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, aber das Zertifikat wird nicht überprüft. |
Achtung
In der obigen Tabelle finden Sie lediglich einen Leitfaden für das Systemverhalten unter verschiedenen Konfigurationen. Für eine sichere Konnektivität müssen Sie dafür sorgen, dass sowohl der Client als auch der Server die Verschlüsselung erzwingen. Sorgen Sie außerdem dafür, dass der Server über ein verifizierbares Zertifikat verfügt und dass die Einstellung TrustServerCertificate
für den Client auf False
festgelegt ist.
Version 1.0
In der folgenden Tabelle werden die Ergebnisse der Verschlüsselung und Validierung für Verschlüsselungs- und Zertifikatseinstellungen beschrieben:
Clienteinstellung Encrypt |
Clienteinstellung Trust Server Certificate |
Servereinstellung Force encryption |
Ergebnis |
---|---|---|---|
False (Standardwert) | False (Standardwert) | Nein | Die Verschlüsselung erfolgt nur für LOGIN-Pakete. Das Zertifikat wird nicht überprüft. |
False (Standardwert) | False (Standardwert) | Ja | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, aber das Zertifikat wird nicht überprüft. |
False (Standardwert) | True | Yes | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, und das Zertifikat wird nicht überprüft. |
True | False (Standardwert) | – | Die Verschlüsselung des gesamten Netzwerkdatenverkehrs erfolgt nur, wenn ein überprüfbares Serverzertifikat vorhanden ist. Andernfalls hat der Verbindungsversuch keinen Erfolg. |
True | True | – | Der gesamte Netzwerkdatenverkehr wird verschlüsselt, aber das Zertifikat wird nicht überprüft. |