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

JDBC および SQLJ アプリケーションで Secure Sockets Layer (SSL) 接続を使用するには、SSL を使用するように、Java Runtime Environment を構成しておく必要があります。 手順の例を説明します。 ただし、ご使用の Java Runtime Environment によって、手順は異なる場合があります。

始める前に

Java Runtime EnvironmentをSSL用に設定する前に、以下の前提条件を満たす必要があります
  • Java Runtime Environmentには、Javaセキュリティプロバイダが含まれていなければなりません。 IBMJSSE2 プロバイダー、 IBMCAC プロバイダー、または SunJSSE プロバイダーをインストールする必要があります。 IBMJSSE2 プロバイダーは、 IBM® のJava用SDKとともに自動的にインストールされます。
    制限事項SunJSSE プロバイダーは、 Oracle Java Runtime Environmentと併用する場合のみご利用いただけます。 SunJSSE プロバイダーは、 IBM Java Runtime Environmentでは動作しません。
  • SSL サポートがデータベース・サーバーで構成されていなければなりません。

プロシージャー

Javaランタイム環境をSSLを使用するように設定するには、以下の手順に従います

  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セキュリティプロバイダ用のJavaランタイム環境を設定するには、 java.security ファイルにエントリを追加します。

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

    security.provider.n=provider-package-name
    

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

    • SunJSSE プロバイダーをご利用の場合は、 Oracle セキュリティプロバイダーのエントリを java.security ファイルに追加してください。
    • IBMCAC プロバイダーをご利用の場合は、 Oracle セキュリティプロバイダーと IBMCAC プロバイダーのエントリを java.security ファイルに追加してください。

      IBMCAC プロバイダーの詳細については、 IBM のJava用共通アクセスカード(CAC)プロバイダー をご覧ください。

    • IBMJSSE2 プロバイダーをご利用の場合は、以下の手順に従ってください
      • FIPS 準拠モードで動作する必要がない場合:

        IBMJSSE2 プロバイダーとIBMJCEプロバイダーのエントリーが java.security ファイルにあることを確認してください。 IBM SDK for Java に同梱されている java.security ファイルには、それらのプロバイダーのエントリーが含まれています。

      • FIPS 準拠モードで動作する必要がある場合:
        • java.security ファイルに、 IBMJCE プロバイダーのエントリーの前に、 IBMJCEFIPS プロバイダーのエントリーを追加します。 IBMJCE プロバイダーの項目は除去しないでください。
        • IBMJSSE2 プロバイダーで FIPS モードを有効にします。 ステップ3 を参照してください。
      制限事項 :Solarisオペレーティングシステム上で IBMJSSE2 プロバイダーを使用する場合は、 IBMJCEIBMJCEFIPS、または IBMJSSE2 プロバイダーのエントリーの前に、 SunJSSE プロバイダーのエントリーを含める必要があります。

    例: 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
    

    例: 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

    例: IBMCAC プロバイダーをご利用の場合は、次の例のような 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
    security.provider.10=com.ibm.security.capi.IBMCAC
  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 ファイルにエントリを追加することで、SSLソケットファクトリプロバイダー用のJavaランタイム環境を設定します。 SunJSSE プロバイダーとJava Runtime Environment 7以降を使用している場合は、この手順は必要ありません。

    SSL ソケット・ファクトリー・プロバイダーの項目の形式は以下のとおりです。

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

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

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

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

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

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

    例: SunJSSE プロバイダーとJava Runtime Environment 6以前を使用している場合は、SSLソケットファクトリプロバイダーのエントリを含めます

    # 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. トラストストアを使用するようにJavaシステムプロパティを設定します。

    そのために、以下のJavaシステムプロパティを設定します

    javax.net.ssl.trustStore
    手順1 でkeytoolユーティリティの-keystoreパラメータで指定したトラストストアの名前を指定します。

    IBM Data Server Driver for JDBC and SQLJ プロパティー DB2BaseDataSource.sslTrustStoreLocation、 db2.jcc.override.sslTrustStoreLocation、または db2.jcc.sslTrustStoreLocation が設定されている場合、その値によって javax.net.ssl.trustStore プロパティー値がオーバーライドされます。

    javax.net.ssl.trustStorePassword (optional)
    トラストストアのパスワードを指定します。 トラストストアのパスワードの設定は必須ではありません。 ただし、パスワードを設定しないと、トラストストアの保全性を保護できません。

    IBM Data Server Driver for JDBC and SQLJ プロパティー DB2BaseDataSource.sslTrustStorePassword、 db2.jcc.override.sslTrustStorePassword、または db2.jcc.sslTrustStorePassword が設定されている場合、その値によって javax.net.ssl.trustStore プロパティー値がオーバーライドされます。

    トラステッド証明書ファイルを使用する場合 (DB2BaseDataSource.sslCertLocation、db2.jcc.override.sslCertLocation、または db2.jcc.sslCertLocation が設定されている場合)、javax.net.ssl.trustStore 値と javax.net.ssl.trustStorePassword 値は使用されません。

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

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