Db2(V11.5)でHADRの通信をSSL化し、セキュリティの強化を図ります。
記事の目次
使用環境
- CentOS 8.1 (Server with GUI)
- Db2 V11.5
鍵の保管先ディレクトリの作成
SSL通信用の鍵の保管先のディレクトリをプライマリとスタンバイ側で作成します。ディレクトリのセキュリティは、インスタンスユーザのみアクセス可能にします。
$ mkdir keystore $ chmod 700 keystore
自己署名証明書の作成
プライマリ側で自己署名証明書の作成を行います。
$ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -keydb -create -db "/home/db2inst1/keystore/primary.kdb" -pw "myPrimaryPassw0rdpw0" -stash $ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -cert -create -db "/home/db2inst1/keystore/primary.kdb" -pw "myPrimaryPassw0rdpw0" -label "myPrimarysigned" -dn "CN=server01,O=myOrganization, OU=myOrganizationUnit,L=myLocation,ST=ON,C=CA" $ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -cert -extract -db "/home/db2inst1/keystore/primary.kdb" -pw "myPrimaryPassw0rdpw0" -label "myPrimarysigned" -target "/home/db2inst1/keystore/primary.arm" -format ascii -fips
スタンバイ側で自己署名証明書の作成を行います。
$ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -keydb -create -db "/home/db2inst1/keystore/standby.kdb" -pw "myStandbyPassw0rdpw0" -stash $ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -cert -create -db "/home/db2inst1/keystore/standby.kdb" -pw "myStandbyPassw0rdpw0" -label "myStandbysigned" -dn "CN=server02,O=myOrganization, OU=myOrganizationUnit,L=myLocation,ST=ON,C=CA" $ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -cert -extract -db "/home/db2inst1/keystore/standby.kdb" -pw "myStandbyPassw0rdpw0" -label "myStandbysigned" -target "/home/db2inst1/keystore/standby.arm" -format ascii -fips
証明書の転送
プライマリで作成した証明書(primary.arm)をスタンバイに転送します。
$ exit # scp -p server02:/home/db2inst1/keystore/standby.arm /home/db2inst1/keystore/ # chown db2inst1:db2iadm1 /home/db2inst1/keystore/standby.arm # chmod 600 /home/db2inst1/keystore/standby.arm # su - db2inst1 $ ls -l keystore
スタンバイで作成した証明書(stanby.arm)をプライマリに転送します。
$ exit # scp -p server01:/home/db2inst1/keystore/primary.arm /home/db2inst1/keystore/ # chown db2inst1:db2iadm1 /home/db2inst1/keystore/primary.arm # chmod 600 /home/db2inst1/keystore/primary.arm # su - db2inst1 $ ls -l keystore
証明書の登録
プライマリでスタンバイの証明書を登録します。
$ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -cert -add -db "/home/db2inst1/keystore/primary.kdb" -pw "myPrimaryPassw0rdpw0" -label "myStandbysigned" -file "/home/db2inst1/keystore/standby.arm" -format ascii -fips
スタンバイでプライマリの証明書を登録します。
$ /home/db2inst1/sqllib/gskit/bin/gsk8capicmd_64 -cert -add -db "/home/db2inst1/keystore/standby.kdb" -pw "myStandbyPassw0rdpw0" -label "myPrimarysigned" -file "/home/db2inst1/keystore/primary.arm" -format ascii -fips
Db2のインスタンスとDBに鍵の情報を設定
プライマリのインスタンスとDBに鍵の情報を設定します。
$ db2 update dbm cfg using SSL_SVR_KEYDB /home/db2inst1/keystore/primary.kdb $ db2 update dbm cfg using SSL_SVR_STASH /home/db2inst1/keystore/primary.sth $ db2 update db cfg for db01 using HADR_SSL_LABEL myPrimarysigned
スタンバイのインスタンスとDBに鍵の情報を設定します。
$ db2 update dbm cfg using SSL_SVR_KEYDB /home/db2inst1/keystore/standby.kdb $ db2 update dbm cfg using SSL_SVR_STASH /home/db2inst1/keystore/standby.sth $ db2 update db cfg for db01 using HADR_SSL_LABEL "myStandbysigned"
Db2の再起動とHADRの再接続
プライマリのDBを停止します。
$ db2 deactivate db db01 $ db2stop
スタンバイのDBを停止します。
$ db2 deactivate db db01 $ db2stop
スタンバイのDBを起動します。
$ db2start $ db2 activate db db01 $ db2pd -hadr -db db01 ... HADR_STATE = REMOTE_CATCHUP_PENDING HADR_FLAGS = ...
プライマリのDBを起動します。
$ db2start $ db2 activate db db01 $ db2pd -hadr -db db01 ... HADR_STATE = PEER HADR_FLAGS = SSL_PROTOCOL ...
「HADR_FLAGS」の値が、「SSL_PROTOCOL」になっていることで、SSL通信が行われていることを確認します。
おわりに
HADRの通信をSSL化し、HADRによる通信のセキュリティの強化を図りました。
参考情報
関連記事
Db2書籍(Amazon)
即戦力のDB2管理術 ~仕組みからわかる効率的管理のノウハウ
DB2 10 エバリュエーション・ガイドブック