Db2(V11.5)でHADRによる通信をSSL化する!

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による通信のセキュリティの強化を図りました。