DB2 6 min read

Db2でデータベースごとに違うSSL証明書を使いたい ― 分けられる/分けられないの逆引き

1つのDb2インスタンスに業務用と検証用のデータベースが同居している。片方だけ別のSSL証明書にしたい。この要望はできる部分とできない部分が混ざっています

設定するパラメーターがDBM CFGにあるかDB CFGにあるかを見れば判断できそうに思えますが、それだけでは足りません。通信の種類によって可否が逆向きになります。

まず見る(結論)

サーバーが提示する証明書はインスタンスに1枚で固定、クライアントが提示する証明書はDB毎に変えられる。この2つを混同すると、いくら設定を探しても見つかりません。

# サーバー証明書はインスタンス単位(DBM CFG)
db2 get dbm cfg | grep -i ssl

# DB CFG にある SSL はクライアント接続用ではなく HADR 用
db2 get db cfg for SAMPLE | grep -i ssl

症状 → 原因 → 対処(逆引き)

やりたいこと 可否と理由 実際に触る場所
DB毎にサーバーが返す証明書を変える 不可。証明書はインスタンスに1枚(SSL_SVR_LABEL 分けたいならインスタンスを分ける
DB毎にSSLポートを分けて証明書を変える 不可SSL_SVCENAME は単一値でカンマ区切り不可(SQL0104N 同上
DB毎にクライアントが提示する証明書を変える 。接続前にDB名が分かっているため db2dsdriver.cfg<database> 要素ごとに SSLClientLabel
CLPや埋め込みSQLでDB毎に分ける 不可db2dsdriver.cfg を読まない SSL_CLNT_KEYDB(DBM CFG)=クライアントインスタンス単位
HADRのレプリケーション通信でDB毎に分ける HADR_SSL_LABEL がDB CFGにある 鍵ストアはインスタンス単位のまま、ラベルだけDB毎に選ぶ

分かれ目は設定ファイルの場所ではなく順序です。TLSハンドシェイクでサーバーが証明書を出す時点で、接続はまだDRDAに入っておらず、どのデータベースに繋ぎに来たのかがサーバーに伝わっていません。DRDAにはHTTPSのSNIに相当する仕組みもないので、証明書を選ぶ材料がありません。クライアント側とHADRは接続先が先に確定しているので選べます。

先に確認したいこと:本当に必要なのは証明書ですか

クライアントに配るのはトラストストアに入れる公開証明書で、秘密鍵を含みません。同一インスタンスの全DBが同じ証明書を返す以上、DB毎に書き出しても中身は同一のバイト列になり、ファイル名が変わるだけです。「アプリAをDB Bに繋がせたくない」が本当の要件なら、それは GRANT / REVOKE と権限設計で作るもので、証明書では実現できません。

設定したのに効かないときの最短確認

db2dsdriver.cfg はパラメーター名を間違えてもXMLとしては妥当なので、黙って無視されます。綴りは db2cli validate で機械的に判定できます。

db2cli validate -dsn DSNSAMP

認識された語は大文字化されて Keywords の表に並び、不明な語だけが **UNKNOWN** と表示されます。正しい綴りは SecurityTransportMode / SSLClientKeystoredb / SSLClientKeystash / SSLClientLabel の4つです(大文字小文字は無視されます)。

HADR側は逆に、鍵ストアに存在しないラベルを書いても DB20000I が返ります。設定時に鍵ストアを見に行かないため、綴り間違いはHADRを開始するまで表に出ません。

実機で確かめた結果と、判断を間違えやすい点

DB CFGに書こうとしたときのメッセージ、2つのDBに同じ証明書が返ることのフィンガープリント比較、db2dsdriver.cfg をDB毎に分けた実際の設定と db2cli validate の出力は、Zennのフル記事に載せています。AUTHENTICATION CERTIFICATE が12.1.4に存在しない話と、SQL0104NExpected tokens を有効値の一覧として読むと誤る話も同記事にあります。

▶ Zennで続きを読む(無料)

Db2のSSL証明書はDB毎に分けられるか ― サーバー側は不可、クライアント側とHADRだけ可


実機ログつきの詳解を読む →

関連: Db2にSSLで接続できない ― SQL30081Nの原因を切り分ける逆引きSQL30081N 通信エラーを切り分ける

構築と同時に満たすべきDb2のセキュリティ設計(認証・暗号化・権限)を、現場の経験談を交えて本書 第3章「セキュリティ設計の基本と実装」で解説しています。

現場で引ける Db2 の教科書

現場で引ける!Db2実践エンジニア・バイブル

Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。

アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集

Zennで読む(¥2,000)→