SSL を使用するための Java ランタイム環境の構成
JDBC および SQLJ アプリケーションで Secure Sockets Layer (SSL) 接続を使用するには、SSL を使用するように、Java Runtime Environment を構成しておく必要があります。 手順の例を説明します。 ただし、ご使用の Java Runtime Environment によって、手順は異なる場合があります。
始める前に
- Java Runtime Environmentには、Javaセキュリティプロバイダが含まれていなければなりません。 IBMJSSE2 プロバイダー、 IBMCAC プロバイダー、または SunJSSE プロバイダーをインストールする必要があります。 IBMJSSE2 プロバイダーは、 IBM® のJava用SDKとともに自動的にインストールされます。制限事項 : SunJSSE プロバイダーは、 Oracle Java Runtime Environmentと併用する場合のみご利用いただけます。 SunJSSE プロバイダーは、 IBM Java Runtime Environmentでは動作しません。
- SSL サポートがデータベース・サーバーで構成されていなければなりません。
プロシージャー
Javaランタイム環境をSSLを使用するように設定するには、以下の手順に従います
- データベースサーバーからクライアントの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 - Javaセキュリティプロバイダ用のJavaランタイム環境を設定するには、 java.security ファイルにエントリを追加します。
セキュリティー・プロバイダーの項目の形式は次のとおりです。
security.provider.n=provider-package-namen の値が小さいプロバイダーのほうが、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 プロバイダーを使用する場合は、 IBMJCE、 IBMJCEFIPS、または IBMJSSE2 プロバイダーのエントリーの前に、 SunJSSE プロバイダーのエントリーを含める必要があります。 - FIPS 準拠モードで動作する必要がない場合:
例: 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 - IBM Data Server Driver for JDBC and SQLJ を FIPS 準拠モードで使用する場合は、
com.ibm.jsse2.JSSEFIPSJava システムプロパティを設定する必要があります。com.ibm.jsse2.JSSEFIPS=true制限事項 :FIPSモードではないJSSEアプリケーションは、FIPSモードのJVMでは実行できません。制限事項 : IBMJSSE2 プロバイダーがFIPSモードで動作している場合、ハードウェア暗号化を使用できません。 - 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 - トラストストアを使用するように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 - IBMCAC プロバイダーを有効にするには、デフォルトのトラストストアとキーストアの定義を上書きします。
-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.keyStoreType=Windows-MY