Share via


Grundlegendes zur SSL-Unterstützung

Wenn die Anwendung beim Herstellen einer Verbindung mit SQL Server Verschlüsselung anfordert und die SQL Server-Instanz für die Unterstützung von SSL-Verschlüsselung konfiguriert ist, initialisiert Microsoft SQL Server JDBC Driver den SSL-Handshake. Mithilfe des Handshakes können der Server und der Client die Verschlüsselungs- und Kryptografiealgorithmen aushandeln, mit denen Daten geschützt werden sollen. Nachdem der SSL-Handshake abgeschlossen wurde, können der Client und der Server die verschlüsselten Daten sicher senden. Während des SSL-Handshakes sendet der Server sein Zertifikat für öffentliche Schlüssel an den Client. Der Aussteller eines Zertifikats für öffentliche Schlüssel wird als Zertifizierungsstelle bezeichnet. Der Client ist dafür verantwortlich zu überprüfen, ob der Client der Zertifizierungsstelle vertraut.

Wenn die Anwendung keine Verschlüsselung anfordert, erzwingt Microsoft SQL Server JDBC Driver keine Unterstützung der SSL-Verschlüsselung von SQL Server. Wenn die SQL Server-Instanz nicht für das Erzwingen der SSL-Verschlüsselung konfiguriert ist, wird eine Verbindung ohne Verschlüsselung hergestellt. Falls die SQL Server-Instanz für das Erzwingen der SSL-Verschlüsselung konfiguriert ist, aktiviert der Treiber automatisch die SSL-Verschlüsselung, wenn er auf einer ordnungsgemäß konfigurierten Java Virtual Machine (JVM) ausgeführt wird. Andernfalls wird die Verbindung getrennt, und der Treiber löst einen Fehler aus.

Hinweis

Weitere Informationen zum Konfigurieren von SSL für SQL Server finden Sie im Thema zum Verschlüsseln von Verbindungen zu SQL Server in der SQL Server-Onlinedokumentation.

Damit Anwendungen die SSL-Verschlüsselung verwenden können, stellt Microsoft SQL Server JDBC Driver ab Version 1.2 die folgenden Verbindungseigenschaften bereit: encrypt, trustServerCertificate, trustStore, trustStorePassword und hostNameInCertificate. Weitere Informationen finden Sie unter Festlegen von Verbindungseigenschaften.

In der folgenden Tabelle wird das Verhalten der Microsoft SQL Server JDBC Driver-Version in möglichen SSL-Verbindungsszenarien zusammengefasst. In jedem Szenario wird ein anderer Satz von SSL-Verbindungseigenschaften verwendet. Die Tabelle schließt Folgendes ein:

  • blank: "Die Eigenschaft ist in der Verbindungszeichenfolge nicht enthalten."

  • value: "Die Eigenschaft ist in der Verbindungszeichenfolge vorhanden, und ihr Wert ist gültig."

  • any: "Es ist nicht ausschlaggebend, ob die Eigenschaft in der Verbindungszeichenfolge vorhanden oder ihr Wert gültig ist."

Hinweis

Das gleiche Verhalten trifft auf die SQL Server-Benutzerauthentifizierung und die integrierte Windows-Authentifizierung zu.

encrypt trustServerCertificate hostNameInCertificate trustStore trustStorePassword Verhalten

false oder blank

any

any

any

any

Microsoft SQL Server JDBC Driver erzwingt nicht, dass SQL Server SSL-Verschlüsselung unterstützt. Wenn der Server ein selbst signiertes Zertifikat aufweist, initiiert der Treiber den SSL-Zertifikataustausch. Das SSL-Zertifikat wird nicht überprüft, und nur die Anmeldeinformationen (im Anmeldepaket) werden verschlüsselt.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch. Das SSL-Zertifikat wird nicht überprüft, die gesamte Kommunikation wird jedoch verschlüsselt.

true

true

any

any

any

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch. Wenn die trustServerCertificate-Eigenschaft auf "true" festgelegt ist, überprüft der Treiber das SSL-Zertifikat nicht.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

blank

blank

blank

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet die in der Verbindungs-URL angegebene serverName-Eigenschaft, um das SSL-Zertifikat des Servers zu überprüfen. Außerdem werden die Suchregeln der Trust-Manager-Factory verwendet, um den zu verwendenden Zertifikatspeicher zu ermitteln.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

value

blank

blank

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber überprüft den Subject-Wert des SSL-Zertifikats mithilfe des für die hostNameInCertificate-Eigenschaft angegebenen Werts.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

blank

value

value

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet den trustStore-Eigenschaftswert zum Ermitteln der Zertifikatdatei trustStore und den trustStorePassword-Eigenschaftswert zum Überprüfen der Integrität der Datei trustStore.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

blank

blank

value

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet den trustStorePassword-Eigenschaftswert zum Überprüfen der Integrität der Standarddatei trustStore.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

blank

value

blank

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet den trustStore-Eigenschaftswert, um den Speicherort der Datei trustStore zu ermitteln.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

value

blank

value

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet den trustStorePassword-Eigenschaftswert zum Überprüfen der Integrität der Standarddatei trustStore. Außerdem verwendet der Treiber den hostNameInCertificate-Eigenschaftswert, um das SSL-Zertifikat zu überprüfen.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

value

value

blank

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet den trustStore-Eigenschaftswert, um den Speicherort der Datei trustStore zu ermitteln. Außerdem verwendet der Treiber den hostNameInCertificate-Eigenschaftswert, um das SSL-Zertifikat zu überprüfen.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

true

false oder blank

value

value

value

Microsoft SQL Server JDBC Driver fordert die Verwendung der SSL-Verschlüsselung mit SQL Server an.

Wenn der Server erfordert, dass der Client SSL-Verschlüsselung unterstützt oder der Server die Verschlüsselung unterstützt, initiiert der Treiber den SSL-Zertifikataustausch.

Der Treiber verwendet den trustStore-Eigenschaftswert zum Ermitteln der Zertifikatdatei trustStore und den trustStorePassword-Eigenschaftswert zum Überprüfen der Integrität der Datei trustStore. Außerdem verwendet der Treiber den hostNameInCertificate-Eigenschaftswert, um das SSL-Zertifikat zu überprüfen.

Wenn der Server nicht für die Unterstützung der Verschlüsselung konfiguriert ist, löst der Treiber einen Fehler aus und trennt die Verbindung.

Wenn die encrypt-Eigenschaft auf true festgelegt ist, verwendet Microsoft SQL Server JDBC Driver den JSSE-Standardsicherheitsanbieter der JVM zum Aushandeln der SSL-Verschlüsselung mit SQL Server. Der Standardsicherheitsanbieter unterstützt möglicherweise nicht alle erforderlichen Features zum erfolgreichen Aushandeln der SSL-Verschlüsselung. Der Standardsicherheitsanbieter könnte beispielsweise die im SSL-Zertifikat für SQL Server verwendete Größe des öffentlichen RSA-Schlüssels nicht unterstützen. In diesem Fall löst der Standardsicherheitsanbieter möglicherweise einen Fehler aus, wodurch der JDBC-Treiber die Verbindung trennt. Führen Sie zum Beheben dieses Problems eine der folgenden Aktionen aus:

  • Konfigurieren Sie SQL Server mit einem Serverzertifikat mit einem kleineren öffentlichen RSA-Schlüssel

  • Konfigurieren Sie die JVM für die Verwendung eines anderen JSSE-Sicherheitsanbieters in der Sicherheitseigenschaftendatei "<java-home>/lib/security/java.security"

  • Verwenden Sie eine andere JVM

Überprüfen des SSL-Serverzertifikats

Während des SSL-Handshakes sendet der Server sein Zertifikat für öffentliche Schlüssel an den Client. Der JDBC-Treiber oder Client muss überprüfen, ob das Serverzertifikat von einer Zertifizierungsstelle herausgegeben wurde, der der Client vertraut. Der Treiber erfordert, dass das Serverzertifikat die folgenden Bedingungen erfüllt:

  • Das Zertifikat wurde von einer vertrauenswürdigen Zertifizierungsstelle ausgegeben.

  • Das Zertifikat muss für die Serverauthentifizierung vorgesehen sein.

  • Das Zertifikat ist nicht abgelaufen.

  • Die Eigenschaft subject des Zertifikats gibt an, dass der allgemeine Name (Common Name, CN) mit dem in der Verbindungszeichenfolge angegebenen Servernamen oder, falls angegeben, mit dem hostNameInCertificate-Eigenschaftswert beginnt. Wenn es sich bei dem Servernamen um eine IP-Adresse handelt, überprüft der Treiber, ob der CN-Wert mit der IP-Adresse beginnt.

Siehe auch

Konzepte

Verwenden der SSL-Verschlüsselung

Andere Ressourcen

Sichern von JDBC-Treiberanwendungen