Db2 11.1

Java Runtime Environment für die Verwendung von SSL konfigurieren

Bevor Sie SSL-Verbindungen (Secure Sockets Layer) in Ihren JDBC-und SQLJ-Anwendungen verwenden können, müssen Sie die Java™ Runtime Environment für die Verwendung von SSL konfigurieren. Es wird eine Beispielprozedur bereitgestellt. Je nach der von Ihnen zu verwendenden Java-Laufzeitumgebung kann die Prozedur jedoch unterschiedlich sein.

Vorbereitende Schritte

Bevor Sie Ihre Java Runtime Environment für SSL konfigurieren können, müssen Sie die folgenden Voraussetzungen erfüllen:
  • Die Java Runtime Environment muss einen Java-Sicherheitsprovider enthalten. Der IBM® JSSE-Provider oder der SunJSSE-Provider muss installiert sein. Der IBM JSSE-Provider wird automatisch mit dem IBM-SDK für Java installiert.
    Einschränkung: Sie können den SunJSSE-Provider nur mit einer Oracle Java Runtime Environment verwenden. Der SunJSSE-Provider funktioniert nicht mit einer IBM Java Runtime Environment.
  • Die SSL-Unterstützung muss auf dem Datenbankserver konfiguriert sein.

Vorgehensweise

Führen Sie die folgenden Schritte aus, um Ihre Java Runtime Environment für die Verwendung von SSL zu konfigurieren:

  1. Importieren Sie ein Zertifikat aus dem Datenbankserver in einen Java-Truststore auf dem Client.

    Verwenden Sie das Dienstprogramm Java keytool , um das Zertifikat in den Truststore zu importieren.

    Beispiel: Nehmen Sie an, dass das Serverzertifikat in einer Datei mit dem Namen cacerts gespeichert ist. Setzen Sie die folgende keytool -Dienstprogrammanweisung ab, um das Zertifikat aus der Datei jcc.cacert zu lesen, und speichern Sie sie in einem Truststore mit dem Namen cacerts.
    keytool -import -file jcc.cacert -keystore cacerts
    Beispiel: Nehmen Sie an, dass das Serverzertifikat in einer Datei mit dem Namen mydbserver.arm gespeichert ist. Setzen Sie die folgende keytool -Dienstprogrammanweisung ab, um das Zertifikat aus der Datei mydbserver.arm zu lesen, und speichern Sie sie in einem Truststore mit dem Namen mynewdbclient.jks.
    keytool -import -trustcacerts -alias myalias -file mydbserver.arm -keystore mynewdbclient.jks
  2. Konfigurieren Sie die Java Runtime Environment für die Java-Sicherheitsprovider, indem Sie Einträge zur Datei java.security hinzufügen.

    Das Format eines Sicherheitsprovidereintrags lautet wie folgt:

    security.provider.n=name_des_providerpakets

    Ein Provider mit einem niedrigeren Wert von n hat Vorrang vor einem Provider mit einem höheren Wert von n.

    Die von Ihnen hinzuzufügenden Java-Sicherheitsprovidereinträge hängen davon ab, ob Sie den IBM JSSE-Provider oder den SunJSSE-Provider verwenden.

    • Wenn Sie den SunJSSE-Provider verwenden, fügen Sie Einträge für die Oracle-Sicherheitsprovider in Ihre java.security-Datei ein.
    • Wenn Sie den IBM-JSSE-Provider verwenden, verwenden Sie eine der folgenden Methoden:
      • Verwenden Sie den Provider IBMJSSE2 (wird für das IBM SDK für Java 1.4.2 und höher unterstützt):
        Empfehlung: Verwenden Sie den Provider IBMJSSE2, und verwenden Sie ihn im FIPS-Modus.
        • Gehen Sie wie folgt vor, wenn Sie nicht im FIPS-konformen Modus arbeiten müssen:
          • Fügen Sie für das IBM SDK für Java 1.4.2 einen Eintrag für den IBMJSSE2Provider zur Datei java.security hinzu. Stellen Sie sicher, dass sich ein Eintrag für den IBMJCE -Provider in der Datei java.security befindet. Die java.security-Datei, die mit dem IBM SDK für Java geliefert wird, enthält einen Eintrag für Einträge für IBMJCE .
          • Stellen Sie für spätere Versionen von IBM SDK für Java sicher, dass die Einträge für IBMJSSE2Provider und IBMJCE in der Datei java.security enthalten sind. Die java.security-Datei, die mit dem IBM SDK für Java geliefert wird, enthält Einträge für diese Provider.
        • Gehen Sie wie folgt vor, wenn Sie im FIPS-konformen Modus arbeiten müssen:
          • Fügen Sie einen Eintrag für den Provider IBMJCEFIPS in Ihre java.security-Datei vor dem Eintrag für den IBMJCE -Provider hinzu. Entfernen Sie den Eintrag für den IBMJCE -Provider nicht.
          • Aktivieren Sie den FIPS-Modus im IBMJSSE2 -Provider. Siehe Schritt 3.
      • Verwenden Sie den Provider IBMJSSE (wird nur für das IBM SDK für Java 1.4.2 unterstützt):
        • Wenn Sie nicht im FIPS-konformen Modus arbeiten müssen, stellen Sie sicher, dass die Einträge für den IBMJSSEProvider und den IBMJCE -Provider in der Datei java.security enthalten sind. Die java.security-Datei, die mit dem IBM SDK für Java geliefert wird, enthält Einträge für diese Provider.
        • Wenn Sie im FIPS-konformen Modus arbeiten müssen, fügen Sie Einträge für den FIPS-genehmigten Provider IBMJSSEFIPSProvider und den Provider IBMJCEFIPS in Ihre java.security-Datei vor dem Eintrag für den IBMJCE -Provider hinzu.
      Einschränkung: Wenn Sie den Provider IBMJSSE auf dem Betriebssystem Solaris verwenden, müssen Sie einen Eintrag für den SunJSSE-Provider vor den Einträgen für die Provider IBMJCE , IBMJCEFIPS , IBMJSSE oder IBMJSSE2 angeben.

    Beispiel: Wenn Sie im FIPS-konformen Modus ausgeführt werden müssen und Sie den FIPS-Modus im IBMJSSE2-Provider aktiviert haben, verwenden Sie eine java.security-Datei, die dem folgenden Beispiel ähnelt:

    # Set the Java security providers
    security.provider.1=com.ibm.jsse2.IBMJSSEProvider2
    security.provider.2=com.ibm.crypto.fips.provider.IBMJCEFIPS
    security.provider.3=com.ibm.crypto.provider.IBMJCE
    security.provider.4=com.ibm.security.jgss.IBMJGSSProvider
    security.provider.5=com.ibm.security.cert.IBMCertPath
    security.provider.6=com.ibm.security.sasl.IBMSASL

    Beispiel: Wenn Sie im FIPS-konformen Modus ausgeführt werden müssen und Sie den Provider IBMJSSE verwenden, verwenden Sie eine java.security-Datei, die dem folgenden Beispiel ähnelt:

    # Set the Java security providers
    security.provider.1=com.ibm.fips.jsse.IBMJSSEFIPSProvider
    security.provider.2=com.ibm.crypto.fips.provider.IBMJCEFIPS
    security.provider.3=com.ibm.crypto.provider.IBMJCE
    security.provider.4=com.ibm.security.jgss.IBMJGSSProvider
    security.provider.5=com.ibm.security.cert.IBMCertPath
    security.provider.6=com.ibm.security.sasl.IBMSASL

    Beispiel: Wenn Sie den SunJSSE-Provider verwenden, verwenden Sie eine java.security-Datei, die dem folgenden Beispiel ähnelt:

    # Set the Java security providers
    security.provider.1=sun.security.provider.Sun
    security.provider.2=com.sun.rsajca.Provider
    security.provider.3=com.sun.crypto.provider.SunJCE
    security.provider.4=com.sun.net.ssl.internal.ssl.Provider

    Beispiel: Wenn Sie den Provider IBMCAC verwenden, verwenden Sie eine java.security-Datei, die dem folgenden Beispiel ähnelt:

    # Set the Java security providers
    security.provider.1=sun.security.provider.Sun
    security.provider.2=com.sun.rsajca.Provider
    security.provider.3=com.sun.crypto.provider.SunJCE
    security.provider.4=com.sun.net.ssl.internal.ssl.Provider
    security.provider.10=com.ibm.security.capi.IBMCAC

    Weitere Informationen zum IBMCAC-Provider finden Sie im Abschnitt Einführung in den IBMCAC-Provider .

  3. Wenn Sie den IBM Data Server Driver for JDBC and SQLJ im FIPS-konformen Modus verwenden möchten, müssen Sie die Systemeigenschaft com.ibm.jsse2.JSSEFIPS Java festlegen:
    com.ibm.jsse2.JSSEFIPS=true 
    Einschränkung: JSSE-Anwendungen ohne FIPS-Modus können nicht in einer JVM ausgeführt werden, die im FIPS-Modus ausgeführt wird.
    Einschränkung: Wenn der IBMJSSE2 -Provider im FIPS-Modus ausgeführt wird, kann die Hardwareverschlüsselung nicht verwendet werden.
  4. Konfigurieren Sie die Java Runtime Environment für die SSL-Socket-Factory-Provider, indem Sie Einträge zur Datei java.security hinzufügen. Dieser Schritt ist nicht erforderlich, wenn Sie den SunJSSE-Provider und die Laufzeitumgebung von Java (7 oder höher) verwenden.

    Das Format der SSL-Socket-Factory-Provider-Einträge wird angezeigt:

    ssl.SocketFactory.provider=name_des_providerpakets
    ssl.ServerSocketFactory.provider=name_des_providerpakets

    Geben Sie den SSL-Socket-Factory-Provider für den Sicherheitsprovider von Java an, den Sie verwenden.

    Beispiel: Wenn Sie den FIPS-Modus im IBMJSSE2-Provider aktivieren, schließen Sie SSL-Socket-Factory-Provider-Einträge in die Datei java.security ein:

    # Set the SSL socket factory provider
    ssl.SocketFactory.provider=com.ibm.jsse2.SSLSocketFactoryImpl 
    ssl.ServerSocketFactory.provider=com.ibm.jsse2.SSLServerSocketFactoryImpl 

    Beispiel: Wenn Sie den FIPS-Modus im IBMJSSE-Provider aktivieren, schließen Sie SSL-Socket-Factory-Provider-Einträge in die Datei java.security ein:

    # Set the SSL socket factory provider
    ssl.SocketFactory.provider=com.ibm.fips.jsse.JSSESocketFactory
    ssl.ServerSocketFactory.provider=com.ibm.fips.jsse.JSSEServerSocketFactory

    Beispiel: Wenn Sie den SunJSSE-Provider und die Java Runtime Environment 6 oder früher verwenden, schließen Sie SSL-Socket-Factory-Provider-Einträge ein:

    # Set the SSL socket factory provider
    ssl.SocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl
    ssl.ServerSocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLServerSocketFactoryImpl
  5. Konfigurieren Sie die Java-Systemeigenschaften, um den Truststore zu verwenden.

    Geben Sie dazu die folgenden Java-Systemeigenschaften an:

    javax.net.ssl.trustStore
    Gibt den Namen des Truststores an, den Sie mit dem Parameter "-keystore" im Dienstprogramm "keytool" in Schritt 1 angegeben haben.

    Wenn die IBM Data Server Driver for JDBC and SQLJ -Eigenschaft DB2BaseDataSource.sslTrustStoreLocation, db2.jcc.override.sslTrustStoreLocation oder db2.jcc.sslTrustStoreLocation festgelegt ist, überschreibt ihr Wert den Eigenschaftswert "javax.net.ssl.trustStore".

    javax.net.ssl.trustStorePassword (optional)
    Gibt das Kennwort für den Truststore an. Sie müssen kein Truststore-Kennwort festlegen. Wenn Sie das Kennwort jedoch nicht festlegen, können Sie die Integrität des Truststores nicht schützen.

    Wenn die IBM Data Server Driver for JDBC and SQLJ -Eigenschaft DB2BaseDataSource.sslTrustStorePassword, db2.jcc.override.sslTrustStorePassword oder db2.jcc.sslTrustStorePassword festgelegt ist, überschreibt dessen Wert den Eigenschaftswert "javax.net.ssl.trustStore".

    Wenn Sie eine vertrauenswürdige Zertifikatsdatei verwenden (wenn DB2BaseDataSource.sslCertLocation, db2.jcc.override.sslCertLocation oder db2.jcc.sslCertLocation gesetzt ist), werden die Werte javax.net.ssl.trustStore und javax.net.ssl.trustStorePassword nicht verwendet.

    Beispiel: Eine Möglichkeit, Java -Systemeigenschaften festzulegen, besteht darin, diese als Argumente der Option -D anzugeben, wenn Sie eine Java -Anwendung ausführen. Angenommen, Sie möchten eine Java-Anwendung mit dem Namen MySSL.java ausführen, die unter Verwendung einer SSL-Verbindung auf eine Datenquelle zugreift. Wenn Sie einen Truststore mit dem Namen cacerts definiert haben, legt der folgende Befehl den Namen des Truststores fest, wenn Sie die Anwendung ausführen.

    java -Djavax.net.ssl.trustStore=cacerts MySSL
  6. Um den Provider von Common Access Card (IBMCAC) zu aktivieren, überschreiben Sie die standardmäßigen Truststore-und Keystore-Definitionen:
    -Djavax.net.ssl.trustStoreType=Windows-ROOT
    -Djavax.net.ssl.keyStoreType=Windows-MY