Question & Answer
Question
バージョン 11.5 で非推奨になった機能
> Transport Layer Security (TLS) プロトコルのバージョン 1.0 と 1.1 の使用は非推奨になりました。
Answer
[SSL/TLS サポートの構成 (データベース・サーバー)]
- インスタンス・オーナーとしてデータベース・サーバーにログインします。
鍵ストアを作成します。
注: 鍵ストアを pkcs12 形式で作成する場合 -keydb -create に -type pkcs12 オプションを付加してください。また、鍵ストア・ファイルの拡張子も kdb でなく p12 にしてください。
-keydb -create で -stash を指定すると、パスワードの入力を省略できるスタッシュ・ファイル (*.sth) が作成されます。gsk8capicmd_64 -keydb -create -db $HOME/server.kdb -pw "myServerPassw0rdpw0" -stash- 鍵ストアに証明書を格納します。
- (自己署名証明書を使用する場合)
鍵ストアに自己証明書を作成します。
注: 自己証明書の有効期限はデフォルトで 365日です。期限を指定する場合は -expire オプションで日数を指定してください。gsk8capicmd_64 -cert -create -db $HOME/server.kdb -stashed -label "myselfsigned" -dn "CN=db2srv.example.com,O=example,ST=Tokyo,C=JP"
- (CA 署名証明書を使用する場合)
公開鍵、秘密鍵と証明書要求を作成します。
gsk8capicmd_64 -certreq -create -db $HOME/server.kdb -stashed -label "signedcert" -dn "CN=db2srv.example.com,O=example,ST=Tokyo,C=JP" -target "signedcert.csr" -size 2048 -sigalg SHA256_WITH_RSA- 作成された証明書要求 (signedcert.csr) をセキュリティ・チームまたは証明局に送り、証明書を受けとります。
ここではルート証明書 ca_root.cer と証明書要求に対する署名つき証明書 signed_cert.cer を受け取ったと仮定します。 鍵ストアにルート証明書を追加し、署名された証明書を受信します。
gsk8capicmd_64 -cert -add -db $HOME/server.kdb -stashed -file ca_root.cer -label "CA_root" -format ascii gsk8capicmd_64 -cert -receive -db $HOME/server.kdb -stashed -file signed_cert.cer中間証明書も受け取った場合、ルート証明書 -> 中間証明書の順に追加してから署名された証明書を受信します。
- (自己署名証明書を使用する場合)
クライアントに配布する証明書をファイルに抽出します。
gsk8capicmd_64 -cert -extract -db $HOME/server.kdb -stashed -label "myselfsigned" -target $HOME/db2srv.arm -format ascii -fipsまたは
gsk8capicmd_64 -cert -extract -db $HOME/server.kdb -stashed -label "signedcert" -target $HOME/db2srv.arm -format ascii -fips
- インスタンス・オーナーとしてデータベース・サーバーにログインします。
データベース・マネージャー構成を変更します。
db2 update dbm cfg using SSL_SVR_KEYDB $HOME/server.kdb db2 update dbm cfg using SSL_SVR_STASH $HOME/server.sth db2 update dbm cfg using SSL_SVR_LABEL myselfsigned または db2 update dbm cfg using SSL_SVR_LABEL signedcert db2 update dbm cfg using SSL_VERSIONS TLSv12 db2 update dbm cfg using SSL_SVCENAME db2s_db2inst1 db2set DB2COMM=SSL,TCPIP注1:SSL_SVR_KEYDB、SSL_SVR_STASH、SSL_SVR_LABEL は gsk8capicmd で作成したものを指定します。
注2:SSL_SVCENAME にサービス名を指定する場合、/etc/services に db2s_db2inst1 50001/tcp などの行を記述しておく必要があります。ポート番号は該当ホストで使用されていない任意の番号を指定できます。構成を反映させるため、インスタンスを再起動します。
db2stop force db2start
注1: APAR IT31205 のため、Db2 11.1 でこの手法による接続は SQL10013N "GSKit Error: 202" で失敗します。
注2: Db2 11.5.6 以降、コマンド行プロセッサーのような組み込み SQL アプリケーションも Simplified SSL をサポートします。
- サーバーの証明書 (上の例では db2srv.arm) をバイナリー・モードで転送します。
以下のようなデーター・サーバー・ドライバー構成ファイル (db2dsdriver.cfg) を作成します。
(db2dsdriver.cfg のデフォルト・ロケーションは sqllib/cfg です。)<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <configuration> <databases> <database host="db2srv.example.com" name="SAMPLE" port="50001"> <parameter name="SecurityTransportMode" value="SSL"/> <parameter name="SSLServerCertificate" value="<db2srv.arm のフルパス>"/> </database> </databases> <dsncollection> <dsn alias="SAMPLE" host="db2srv.example.com" name="SAMPLE" port="50001"/> </dsncollection> </configuration>上のような db2dsdriver.cfg は以下のコマンドで作成できます。
db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 db2cli writecfg add -dsn SAMPLE -database SAMPLE -host db2srv.example.com -port 50001 db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 -parameter "SecurityTransportMode=SSL" db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 -parameter "SSLServerCertificate=<db2srv.arm のフルパス>"接続をテストします。
db2cli validate -dsn SAMPLE -connect -user <server_user_name> -passwd <password>注:Db2 11.5.6 以降はコマンド行プロセッサー (CLP) でもテストできます。
db2 connect to SAMPLE user <server_user_name>11.5.5 以前の CLP による接続は SQL30081N Communication function detecting the error: "sqlccSSLSocketSetup". Protocol specific error code(s): "414" で失敗します。
- 1 から 2 の手順はサーバーで実行し、作成された client* を各クライアントに配布します。
- SaaS などでサーバーの GSkit が利用できない場合、パスポート・アドバンテージから Db2 Support Files for SSL Functionality をダウンロードしてインストール後に gsk8capicmd を利用できます。
- インスタンス・オーナー (UNIX/Linux) または管理者 (Windows) でサーバーにログインします。
鍵ストアを作成し、サーバー証明書を追加します。
gsk8capicmd_64 -keydb -create -db "client.kdb" -pw "myClientPassw0rdpw0" -stash gsk8capicmd_64 -cert -add -db "client.kdb" -stashed -label "db2srv" -file "db2srv.arm" -fips- 作成した client* をクライアントに転送します。
クライアントで db2dsdriver.cfg を使っている場合と、データベース・カタログを使っている場合で構成方法が異なります。
なお、Db2 11.5.6 以降、db2dsdriver.cfg のみでコマンド行プロセッサーのような組み込み SQL からも接続可能です。
- db2dsdriver.cfg を利用して接続する場合
クライアントにログインし、db2cli コマンドで db2dsdriver.cfg を構成します。
db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 -parameter "SecurityTransportMode=SSL" db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 -parameter "SSLClientKeystoredb=<client.kdbのパス>" db2cli writecfg add -database SAMPLE -host db2srv.example.com -port 50001 -parameter "SSLClientKeystash=<client.sthのパス>" db2cli writecfg add -dsn SAMPLE -database SAMPLE -host db2srv.example.com -port 50001接続をテストします。
db2cli validate -dsn SAMPLE -connect -user <username> -passwd <password>
- データベース・カタログを利用して接続する場合
クライアントにインスタンス・オーナーまたは管理者としてログインしデータベース・マネージャー構成を更新します。
db2 update dbm cfg using SSL_CLNT_KEYDB <client.kdbのパス> db2 update dbm cfg using SSL_CLNT_STASH <client.sthのパス>データベースを security SSL オプションつきでカタログします。
db2 catalog tcpip node SSLHOST remote db2srv.example.com server 50001 security SSL db2 catalog db SAMPLE at node SSLHOST接続をテストします。
db2 connect to sample user <username>
Java クライアントは keytool で鍵ストアと証明書を管理できます。
Db2 に付属の Java に含まれる keytool を使う場合、「運用上の考慮点」を参照して Java の PATH を設定する必要があります。
- Java クライアントにログインします。
- サーバーの証明書 (上の例では db2srv.arm) をバイナリー・モードで転送します。
鍵ストアを作成し、証明書をインポートします。
keytool -import -trustcacerts -alias db2srv -file db2srv.arm -keystore dbclient.jks注:鍵ストア (上の例では dbclient.jks) が存在しない場合は作成されます。このとき鍵ストアの初期パスワード設定が要求されます。
注:インポートする証明書 (上の例では db2srv.arm) を信用するか聞かれるので y を入力します。DB2Jcc ユーティリティーで接続をテストします。環境変数 CLASSPATH に db2jcc.jar または db2jcc4.jar が含まれている必要があります。
java -Ddb2.jcc.sslConnection=true -Ddb2.jcc.sslTrustStoreLocation=<鍵ストア (dbclient.jks) のフルパス> com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://db2srv.example.com:50001/sample -user <server_user_name> -password <password>Java アプリケーションのソース・コードからは以下のようなオプションで TLS 接続を指定できます。
// create data source com.ibm.db2.jcc.DB2SimpleDataSource ds = new com.ibm.db2.jcc.DB2SimpleDataSource(); // set connection properties ds.setServerName("db2srv.example.com"); ds.setPortNumber(50001); ds.setDatabaseName("sample"); ds.setDriverType(4); ds.setSslConnection(true); ds.setSslTrustStoreLocation("<鍵ストア (dbclient.jks) のフルパス>");鍵ストアのパスは Java のシステム・プロパティ javax.net.ssl.trustStore でも指定できます。
通常 java.security ファイルの編集は必要ありません。デフォルトのセキュリティ・プロバイダー構成が使用可能です。
Db2 に付属の GSkit を使用する場合、gsk8capicmd_64 コマンドの実行前に以下の設定が必要です。
AIXexport LIBPATH=$HOME/sqllib/lib64/gskit:$LIBPATH export PATH=$HOME/sqllib/gskit/bin:$PATHLinuxexport LD_LIBRARY_PATH=$HOME/sqllib/lib64/gskit:$LIBPATH export PATH=$HOME/sqllib/gskit/bin:$PATHWindows
set LIB="C:¥Program Files¥ibm¥gsk8¥lib";%LIB% set PATH="C:¥Program Files¥ibm¥gsk8¥bin";%PATH%Db2 に付属の Java/JSSE を使用する場合、keytool コマンドの実行前に以下の設定が必要です。
AIX/Linux (インスタンス・オーナーで実行する場合)export PATH=$HOME/sqllib/java/jdk64/bin:$PATHWindows (Db2 が C:\Program Files\IBM\SQLLIB にインストールされている場合)
set %PATH%="C:\Program Files\IBM\SQLLIB\java\jdk\bin";%PATH%openssl コマンドを使用できるクライアントからは、以下のようなコマンドで直接サーバーの証明書を入手できます。
openssl s_client -servername db2srv.example.com -connect db2srv.example.com:50001 </dev/null 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./db2srv.arm各クライアントがデータベースへ TLS で接続しているかどうかは、対象データベースへ接続して MON_GET_CONNECTION 表関数で確認できます。
例db2 connect to <database_name> db2 "select application_id,client_protocol from table(mon_get_connection(null,-2))" APPLICATION_ID CLIENT_PROTOCOL ------------------------------ --------------- 192.168.0.9.47518.220526065837 SSL4 1 record(s) selected.Db2 11.5.8 以降、mon_get_connection 表関数は CONNECT_SEC_TYPE (TLS レベル)、CONNECT_CIPHER_SPEC (証明書仕様)、SSL_SRV_CERT_LABEL (証明書ラベル) などの追加情報を提供します。
Db2 11.5.8 新機能:セキュリティーの向上GSkit が作成する自己証明書の有効期限はデフォルトで 365 日です。失効前に新しい証明書を使用する必要があります。
例:鍵ストアの証明書一覧と、指定した証明書の有効期限を確認する方法$ gsk8capicmd_64 -cert -list -db $HOME/server.kdb -stashed Certificates found * default, - personal, ! trusted, # secret key - myselfsigned $ gsk8capicmd_64 -cert -details -db $HOME/server.kdb -stashed -label "myselfsigned" Label : myselfsigned Key Size : 2048 Version : X509 V3 Serial : 78745cffd54be128 Issuer : "CN=db2srv.example.com,O=example,ST=Tokyo,C=JP" Subject : "CN=db2srv.example.com,O=example,ST=Tokyo,C=JP" Not Before : May 24, 2022 11:45:24 PM JST Not After : May 25, 2023 11:45:24 PM JST // この日付時刻まで有効です。TLS に使用する証明書は CMS 形式 (*.kdb) または PKCS12 形式 (*.p12) の鍵ストアを利用できます。 Db2 ネイティブ暗号化と鍵ストアを共用する場合、PKCS12 形式を使用する必要があるため、既存の鍵ストアが CMS 形式の場合は以下のようなコマンドで PKCS12 形式に変換できます。
gsk8capicmd_64 -keydb -convert -db $HOME/server.kdb -pw myServerPassw0rdpw0 -old_format kdb -new_db $HOME/dbserver.p12 -new_pw myServerPassw0rdpw0 -new_format p12 -stash鍵ストアの名前を変更した場合、SSL_SVR_KEYDB および SSL_SVR_STASH の設定を変更する必要があります。
- 非 Java Db2 クライアントは複数の証明局の Root 証明書を添付しており、鍵ストアを作成しなくてもこれらの証明局の証明書チェーンの証明書を信頼できます。詳細はマニュアルを参照してください。
Db2 11.5 Security CLI/ODBC and IBM data server driver configuration keyword
Db2 12.1 Security CLI/ODBC and IBM data server driver configuration keyword
このため、たとば 11.5.9 CSB 69673 以降および 12.1.0 の非 Java アプリケーションは DigiCert G1 および G5 Root CA の証明書チェーンを、鍵ストアの設定なしに使用可能です。
Was this topic helpful?
Document Information
Modified date:
30 April 2025
UID
swg21623694