はじめに
JavaアプリケーションからTLS対応のDb2へ接続する方法を試してみました。確認したかったのはクライアント側の構成方法だったのですが、確認用に接続先データベースが必要になるので、Db2に付属のSAMPLEデータベースをTLS対応にして接続先データベースとしました。
手順と設定方法を備忘録として残しておくことにします。
環境
本投稿内容は以下の環境で動作確認しています。
ソフトウェア | バージョン | 備考 |
---|---|---|
Windows 11 Pro | 23H2 | |
Db2 for Windows (x64) | 11.5.8 | Db2 Community Edition |
Java | 17 | |
Open Liberty | 23.0.0.10 |
Db2サーバーのTLSサポート構成
Db2に付属のSAMPLEデータベースをTLS対応にします。
サーバー側の構成作業として以下を実施します。
- 鍵ストアの作成
- 証明書(自己証明書)の作成
- 証明書の抽出(配布用)
- データベース構成の変更
1. 鍵ストアの作成
以下のコマンドで鍵ストアserver.p12
を作成します(参照情報[1][2])。
gsk8capicmd_64 -keydb -create -db server.p12 -pw password -stash -pqc false
2. 証明書(自己証明書)の作成
前記鍵ストアserver.p12
の中に自己証明書を作成します(参照情報[3])。
gsk8capicmd_64 -cert -create -db server.p12 -stashed -label myselfsigned -dn "CN=localhost" -size 2048 -sigalg SHA256_WITH_RSA
3. 証明書の抽出(配布用)
クライアントに配布する証明書を抽出します(参照情報[4])。
gsk8capicmd_64 -cert -extract -db server.p12 -stashed -label myselfsigned -target myselfsigned.crt -format ascii
4. データベース構成の変更(参照情報[5])
鍵ストア・ファイルのパス(C:\db2tls
に配置するものとします)を設定します。
db2 update dbm cfg using SSL_SVR_KEYDB C:\db2tls\server.p12
stashファイルのパス(C:\db2tls
に配置するものとします)を設定します。
db2 update dbm cfg using SSL_SVR_STASH C:\db2tls\server.sth
SSL_SVR_LABEL構成パラメーターに自己証明書のラベルを設定します。
db2 update dbm cfg using SSL_SVR_LABEL myselfsigned
SSL_SVCENAME 構成パラメーターにTLS接続をlistenするポートを設定します。
db2 update dbm cfg using SSL_SVCENAME 25001
TLS を DB2COMM レジストリー変数に追加します。
db2set DB2COMM=SSL
Db2クライアントの構成
Db2クライアントの構成作業として以下を実施します。
- サーバー側から配布された証明書をインポート
- Javaアプリ実行時に参照する構成情報の設定
1. サーバー側から配布された証明書をインポート
「Db2サーバーのTLSサポート構成」の「3. 証明書の抽出(配布用)」で抽出した証明書をDb2クライアント側の鍵ストアにインポートします。以下のコマンドはJDKに付属のkeytoolを利用した例です(参照情報[6])。
keytool -importcert -alias myselfsigned -file myselfsigned.crt -keystore clientks.p12 -storetype pkcs12 -storepass password
2. Javaアプリ実行時に参照する構成情報の設定
構成情報の設定には構成プロパティーを使用します。
実行時に参照される構成プロパティーは以下いずれかの方法で設定できます(参照情報[7])。
- CLASSPATH上に
DB2JccConfiguration.properties
を配置 - システム・プロパティー
db2.jcc.propertiesFile
で指定(スタンドアロンJavaアプリの場合-Ddb2.jcc.propertiesFile=
で構成プロパティー・ファイルのパスを指定、ファイル名は任意の名前でOK) - 個々の構成プロパティーをシステム・プロパティーで指定
構成プロパティーの設定例を以下に示します(参照情報[8])。
db2.jcc.sslConnection=true
db2.jcc.sslTrustStoreLocation=C:/db2tls/clientks.p12
db2.jcc.sslTrustStorePassword=password
Liberty環境から接続する場合の設定
IBM WebSphere LibertyまたはOpen Liberty(以下Libertyと表記)から接続する場合は、Libertyの構成ファイルであるserver.xml
のDataSource定義に前記の構成プロパティーを記述します。以下に記述例を示します(参照情報[9])。
<dataSource id="DefaultDataSource" jndiName="jdbc/db2/SAMPLE">
<jdbcDriver libraryRef="DB2JCCLib"/>
<properties.db2.jcc currentSchema="TSUNO" databaseName="SAMPLE"
serverName="localhost" portNumber="25001" user="db2admin" password="password"
sslConnection="true"
sslTrustStoreLocation="C:/db2tls/clientks.p12"
sslTrustStorePassword="password" />
</dataSource>
以上です。
参照情報
[1]Global Security Kit のインストールの紹介
[2]GSKit を使用した鍵ストアの作成
[3]GSKit を使用した自己署名証明書の作成
[4]Db2 クライアントへの自己署名証明書の配布
[5]Db2 サーバーでの TLS サポートの構成
[6]TLS を使用するための Java ランタイム環境の構成
[7]IBM Data Server Driver for JDBC and SQLJ 構成プロパティーのカスタマイズ
[8]IBM Data Server Driver for JDBC and SQLJ 構成プロパティー
[9]Liberty Server configuration (dataSource > properties.db2.jcc)