Konfigurieren des Clients für die Verschlüsselung

JDBC-Treiber herunterladen

Microsoft JDBC-Treiber für SQL Server oder der Client muss überprüfen, ob der Server der richtige Server ist und das Serverzertifikat von einer Zertifizierungsstelle ausgegeben wurde, der der Client vertraut. Zum Überprüfen des Serverzertifikats müssen die Vertrauensinformationen zur Verbindungszeit angegeben werden. Außerdem muss der Aussteller des Serverzertifikats eine Zertifizierungsstelle sein, der der Client vertraut.

In diesem Artikel wird zuerst beschrieben, wie die Vertrauensinformationen auf dem Clientcomputer angegeben werden. Anschließend wird das Importieren eines Serverzertifikats in den Vertrauensspeicher des Clientcomputers beschrieben, wenn die Instanz des TLS-Zertifikats (Transport Layer Security) von SQL Server von einer privaten Zertifizierungsstelle veröffentlicht wird.

Weitere Informationen zum Überprüfen des Serverzertifikats finden Sie im Abschnitt zum Überprüfen des TLS-Serverzertifikats unter Grundlegendes zur Verschlüsselungsunterstützung.

Konfigurieren des Clientvertrauensspeichers

Damit das Serverzertifikat überprüft werden kann, sind die Vertrauensinformationen zur Verbindungszeit entweder explizit mithilfe der VerbindungseigenschaftentrustStore und trustStorePassword oder implizit mithilfe des Standardvertrauensspeichers der zugrunde liegenden Java Virtual Machine (JVM) erforderlich. Weitere Informationen zum Festlegen der Eigenschaften trustStore und trustStorePassword in einer Verbindungszeichenfolge finden Sie unter Herstellen von Verbindungen mit einer Verschlüsselung.

Wenn die trustStore-Eigenschaft nicht angegeben oder auf NULL festgelegt ist, verwendet Microsoft JDBC-Treiber für SQL Server den Sicherheitsanbieter der zugrunde liegenden JVM, d. h. Java Secure Socket Extension (SunJSSE). Der SunJSSE-Anbieter stellt einen Standard-TrustManager bereit. Hiermit werden die von SQL Server zurückgegebenen X.509-Zertifikate anhand der in einem Vertrauensspeicher bereitgestellten Vertrauensinformationen überprüft.

Der TrustManager versucht, den Standard-trustStore in der folgenden Suchreihenfolge zu suchen:

  • Wenn die Systemeigenschaft „javax.net.ssl.trustStore“ definiert ist, versucht TrustManager, die standardmäßige trustStore-Datei anhand des von der Systemeigenschaft angegebenen Dateinamens zu suchen.
  • Wenn die Systemeigenschaft „javax.net.ssl.trustStore“ nicht angegeben wurde und die Datei „<java-home>/lib/security/jssecacerts“ vorhanden ist, wird diese Datei verwendet.
  • Wenn die Datei „<java-home>/lib/security/cacerts“ vorhanden ist, wird diese Datei verwendet.

Weitere Informationen finden Sie in der Dokumentation zur SUNX509 TrustManager-Schnittstelle auf der Sun Microsystems-Website.

Durch die Java Runtime-Umgebung können Sie die trustStore-Systemeigenschaft und die trustStorePassword-Systemeigenschaft wie folgt festlegen:

java -Djavax.net.ssl.trustStore=C:\MyCertificates\storeName
java -Djavax.net.ssl.trustStorePassword=storePassword

In diesem Fall verwenden alle Anwendungen, die auf dieser JVM ausgeführt werden, diese Einstellungen als Standard. Zum Überschreiben der Standardeinstellungen in Ihrer Anwendung sollten Sie die Verbindungseigenschaften trustStore und trustStorePassword entweder in der Verbindungszeichenfolge oder in der entsprechenden Setter-Methode der Klasse SQLServerDataSource festlegen.

Außerdem können Sie die Standard-Vertrauensspeicherdateien wie „<java-home>/lib/security/jssecacerts“ und „<java-home>/lib/security/cacerts“ konfigurieren und verwalten. Verwenden Sie hierzu das JAVA-Hilfsprogramm "keytool", das mit der JRE (Java Runtime Environment) installiert wird. Weitere Informationen zum Hilfsprogramm „keytool“ finden Sie in der Dokumentation zu „keytool“ auf der Oracle-Website.

Importieren des Serverzertifikats in den Vertrauensspeicher

Während des TLS-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 muss sicherstellen, dass die Zertifizierungsstelle eine von denen ist, denen er vertraut. Diese Sicherung wird erreicht, indem der öffentliche Schlüssel von vertrauenswürdigen Zertifizierungsstellen im Voraus bekannt ist. Normalerweise wird die JVM mit einem vordefinierten Satz vertrauenswürdiger Zertifizierungsstellen geliefert.

Wenn die Instanz des TLS-Zertifikats von SQL Server von einer privaten Zertifizierungsstelle veröffentlicht wird, müssen Sie das Zertifikat der Zertifizierungsstelle der Liste der vertrauenswürdigen Zertifikate im Vertrauensspeicher des Clientcomputers hinzufügen.

Verwenden Sie hierzu das JAVA-Hilfsprogramm "keytool", das mit der JRE (Java Runtime Environment) installiert wird. Mit der folgenden Eingabeaufforderung wird die Verwendung des Hilfsprogramms "keytool" zum Importieren eines Zertifikats aus einer Datei veranschaulicht:

keytool -import -v -trustcacerts -alias myServer -file caCert.cer -keystore truststore.ks

Im Beispiel wird die Datei "caCert.cer" als Zertifikatsdatei verwendet. Sie müssen diese Zertifikatsdatei vom Server abrufen. In den folgenden Schritten wird erläutert, wie das Serverzertifikat in eine Datei exportiert wird:

  1. Wählen Sie „Start“, dann „Ausführen“ aus, und geben Sie „MMC“ ein. (MMC ist die Abkürzung für Microsoft Management Console.)
  2. Öffnen Sie in MMC die Zertifikate.
  3. Erweitern Sie Eigene Zertifikate und dann Zertifikate.
  4. Klicken Sie mit der rechten Maustaste auf das Serverzertifikat, und wählen Sie dann unter Alle Aufgaben die Option Exportieren aus.
  5. Wählen Sie „Weiter“ aus, um das Dialogfeld „Willkommen“ des Zertifikatexport-Assistenten zu überspringen.
  6. Vergewissern Sie sich, dass No, do not export the private key ausgewählt ist, und wählen Sie „Weiter“ aus.
  7. Wählen Sie „DER-codiert-binär X.509 (.CER)“ oder „Base-64-codiert X.509 (.CER)“ und dann „Weiter“ aus.
  8. Geben Sie einen Namen für die Exportdatei ein.
  9. Wählen Sie „Weiter“ und dann „Fertig stellen“ aus, um das Zertifikat zu exportieren.

Weitere Informationen

Verwenden von Verschlüsselung
Schützen von JDBC-Treiberanwendungen