0
0

JavaアプリからTLS対応のDb2へ接続する方法を試してみた

Posted at

はじめに

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. 鍵ストアの作成
  2. 証明書(自己証明書)の作成
  3. 証明書の抽出(配布用)
  4. データベース構成の変更

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クライアントの構成作業として以下を実施します。

  1. サーバー側から配布された証明書をインポート
  2. 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])。

DB2JccConfiguration.properties
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])。

server.xml(DataSource定義の抜粋)
<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)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0