TLS を使用するための Java ランタイム環境の構成

JDBC およびSQLJアプリケーションで トランスポート層セキュリティ(TLS) 接続を使用するには、Java™ランタイム環境をTLS を使用するように構成する必要があります。 手順の例を説明します。 ただし、ご使用の Java Runtime Environment によって、手順は異なる場合があります。

始める前に

TLS用に Java ランタイム環境を構成する前に、以下の前提条件を満たす必要があります。
  • Java ランタイム環境には、Java セキュリティー・プロバイダーが含まれている必要があります。 IBM® JSSE プロバイダーまたは SunJSSE プロバイダーがインストールされている必要があります。 IBM JSSE プロバイダーは、 IBM SDK for Java とともに自動的にインストールされます。
    制約事項: SunJSSE プロバイダーは、 Oracle Java ランタイム環境でのみ使用できます。 SunJSSE プロバイダーは、 IBM Java ランタイム環境では機能しません。
  • データベース・サーバーで TLS サポートを構成する必要があります。

プロシージャー

TLSを使用するように Java ランタイム環境を構成するには、以下の手順を実行します。

  1. データベース・サーバーからクライアント上の Java トラストストアに証明書をインポートします。

    Java keytool ユーティリティーを使用して、証明書をトラストストアにインポートします。

    例: サーバー証明書が cacerts というファイルに保管されているとします。 以下の keytool ユーティリティー・ステートメントを発行して、ファイル jcc.cacertから証明書を読み取り、cacerts というトラストストアに保管します。
    keytool -import -file jcc.cacert -keystore cacerts
    例: サーバー証明書が mydbserver.armという名前のファイルに保管されているとします。 以下の keytool ユーティリティー・ステートメントを発行して、ファイル mydbserver.armから証明書を読み取り、それを mynewdbclient.jksという名前のトラストストアに保管します。
    keytool -import -trustcacerts -alias myalias -file mydbserver.arm -keystore mynewdbclient.jks
  2. java.security ファイルにエントリーを追加して、Java セキュリティー・プロバイダー用に Java ランタイム環境を構成します。

    セキュリティー・プロバイダーの項目の形式は次のとおりです。

    security.provider.n=provider-package-name
    

    n の値が小さいプロバイダーのほうが、n の値が大きいプロバイダーより優先されます。

    追加する Java セキュリティー・プロバイダー・エントリーは、 IBM JSSE プロバイダーを使用するか、 SunJSSE プロバイダーを使用するかによって異なります。

    • SunJSSE プロバイダーを使用する場合は、Oracle セキュリティー・プロバイダーのエントリーを java.security ファイルに追加します。
    • IBM JSSE プロバイダーを使用する場合は、以下のいずれかの方法を使用します。
      • IBMJSSE2 プロバイダー ( IBM SDK for Java 1.4.2 以降でサポート) を使用します。
        推奨: IBMJSSE2 プロバイダーを使用し、FIPS モードで使用してください。
        • FIPS 準拠モードで動作する必要がない場合:
          • IBM SDK for Java 1.4.2の場合は、 IBMJSSE2Provider のエントリーを java.security ファイルに追加します。 IBMJCE プロバイダーの項目が java.security ファイルにあることを確認してください。 IBM SDK for Java に付属の java.security ファイルには、 IBMJCEのエントリーのエントリーが含まれています。
          • 新しいバージョンの IBM SDK for Java の場合は、 IBMJSSE2Provider および IBMJCE プロバイダーのエントリーが java.security ファイル内にあることを確認してください。 IBM SDK for Java に付属の java.security ファイルには、これらのプロバイダーのエントリーが含まれています。
        • FIPS 準拠モードで動作する必要がある場合:
          • java.security ファイルの IBMJCE プロバイダーのエントリーの前に、 IBMJCEFIPS プロバイダーのエントリーを追加します。 IBMJCE プロバイダーの項目は除去しないでください。
          • IBMJSSE2 プロバイダーで FIPS モードを有効にします。 ステップ 3を参照してください。
      • IBMJSSE プロバイダーの使用 ( IBM SDK for Java 1.4.2 でのみサポート):
        • FIPS 準拠モードで動作する必要がない場合は、IBMJSSEProvider および IBMJCE プロバイダーの項目が java.security ファイルにあることを確認してください。 IBM SDK for Java に付属の java.security ファイルには、これらのプロバイダーのエントリーが含まれています。
        • FIPS 準拠モードで操作する必要がある場合は、 IBMJCE プロバイダーのエントリーの前に、FIPS 承認プロバイダー IBMJSSEFIPSProvider および IBMJCEFIPS プロバイダーのエントリーを java.security ファイルに追加します。
      制約事項: Solaris オペレーティング・システムで IBMJSSE プロバイダーを使用する場合は、 SunJSSE プロバイダーのエントリーを、 IBMJCEIBMJCEFIPSIBMJSSE、または IBMJSSE2 プロバイダーのエントリーの前に組み込む必要があります。

    例: FIPS 準拠モードで実行する必要があり、 IBMJSSE2 プロバイダーで FIPS モードを有効にした場合は、以下の例のような java.security ファイルを使用します。

    # 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
    

    例: FIPS 準拠モードで実行する必要があり、IBMJSSE プロバイダーを使用している場合は、次の例のような java.security ファイルを使用します。

    # 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
    

    例: SunJSSE プロバイダーを使用する場合は、次の例のような java.security ファイルを使用します。

    # 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
  3. IBM Data Server Driver for JDBC and SQLJ を FIPS 準拠モードで使用する予定の場合は、次のように com.ibm.jsse2.JSSEFIPS Java システム・プロパティーを設定する必要があります。
    com.ibm.jsse2.JSSEFIPS=true 
    制約事項: 非 FIPS モードの JSSE アプリケーションは、FIPS モードの JVM では実行できません。
    制約事項: IBMJSSE2 プロバイダーが FIPS モードで実行されている場合は、ハードウェア暗号化を使用できません。
  4. java.security ファイルにエントリーを追加して、 TLS ソケット・ファクトリー・プロバイダー用に Java ランタイム環境を構成します。 SunJSSE プロバイダーおよび Java ランタイム環境 7 以降を使用する場合、このステップは必要ありません。

    TLS ソケット・ファクトリー・プロバイダー・エントリーのフォーマットを以下に示します。

    ssl.SocketFactory.provider=provider-package-name
    ssl.ServerSocketFactory.provider=provider-package-name

    使用する Java セキュリティー・プロバイダーの TLS ソケット・ファクトリー・プロバイダーを指定します。

    例: IBMJSSE2 プロバイダーで FIPS モードを有効にする場合、 java.security ファイルに TLS ソケット・ファクトリー・プロバイダー・エントリーを含めます。

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

    例: IBMJSSE プロバイダーで FIPS モードを有効にする場合は、 java.security ファイルに TLS ソケット・ファクトリー・プロバイダー・エントリーを含めます。

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

    例: SunJSSE プロバイダー、および Java ランタイム環境 (6 以前) を使用する場合、 TLS ソケット・ファクトリー・プロバイダー・エントリーを組み込みます。

    # Set the TLS socket factory provider
    ssl.SocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl
    ssl.ServerSocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLServerSocketFactoryImpl
    
  5. トラストストアを使用するように Java システム・プロパティーを構成します。

    これを行うには、以下の Java システム・プロパティーを設定します。

    javax.net.ssl.trustStore
    ステップ 1で keytool ユーティリティーの -keystore パラメーターで指定したトラストストアの名前を指定します。
    javax.net.ssl.trustStorePassword (オプション)
    トラストストアのパスワードを指定します。 トラストストアのパスワードの設定は必須ではありません。 ただし、パスワードを設定しないと、トラストストアの保全性を保護できません。

    例: Javaシステムプロパティを設定する方法の1つとして、Javaアプリケーションを実行する際に -Dの引数として指定する方法があります。 TLS 接続を使用してデータ ソースにアクセスする、 MyTLS.java という名前の Java アプリケーションを実行するとします。 cacerts という名前のトラストストアを定義した場合は、次のコマンドで、アプリケーションの実行時にトラストストア名を設定できます。

    java -Djavax.net.ssl.trustStore=cacerts MyTLS
  6. Common Access Card (IBMCAC) プロバイダーを有効にするには、トラストストアと鍵ストアのデフォルト定義を次のように上書きします。
    -Djavax.net.ssl.trustStoreType=Windows-ROOT
    -Djavax.net.ssl.keyStoreType=Windows-MY