SSLキーおよび証明書の更新ガイドライン
サーバーが使用する証明書が期限切れになるか、有効でなくなった場合は、SSLキーおよび証明書を置き換えることが必要になることがあります。この項では、このタスクを完了するための手順について説明します。
以降の指示では、自己署名証明書および関連付けられるキー(Oracle NoSQL Databaseのデフォルト)について説明します。または、既存のデフォルト・セキュア・インストール用の外部証明書の構成ガイドラインで説明されているように、外部証明書を使用することもできます。
SSLキー/証明書の更新には、次のステップが含まれます。
- ストレージ・ノードに新しいキー/証明書のペアを作成します。
- 新しいキー/証明書のペアをすべてのストレージ・ノードにコピーし、新しい証明書を既存のトラスト・ストア・ファイル(
client.trust
とstore.trust
)にマージします。 - 各ストレージ・ノードを順番に再起動します。
- マージされたエントリとともに
client.trust
を各クライアントにコピーします。 - マージされたエントリを含む
store.keys
を各ストレージ・ノードにコピーし、各ストレージ・ノードを順番に再起動します(2回目)。 - すべてのストレージ・ノードの
store.trust
内の古い証明書を削除します。 - 新しい証明書のみが使用されていることを確認します。
実行中のストアのSSLキーおよび証明書を更新するには、次のステップを実行します。Oracle NoSQL Databaseは、プロセス全体を通して操作可能なままにできます。
ノート:
このタスク・セットに使用されるOracle NoSQL Database開発環境には、1つのシャードが存在し、レプリケーション係数は3 (RF=3)です。この手順を開始する前に、キーを格納する一時ディレクトリを作成します。ステップ1の出力例では、
/Users/my_name/tmp/kvroot/
の下に、newKey
として一時ディレクトリが作成されます。
cd /Users/my_name/tmp/kvroot/
mkdir newKey
セキュリティ構成ファイルの詳細は、セキュリティ構成を参照してください。
新しいSSLキー証明書の作成
- SNノードの1つ(SN1)上のNoSQL開発環境から、
securityconfig
ユーティリティを実行して、新しいディレクトリnewKey
に新しいキーを作成します。新しい構成では、現在の構成と同じキーストア・パスワードを指定する必要があります。-kspwd
オプションでパスワードを指定しない場合、ユーティリティによってパスワードの設定を求められます。cd /Users/my_name/tmp/kvroot/ mkdir newKey java -jar $KVHOME/lib/kvstore.jar securityconfig config create -root /Users/my_name/tmp/kvroot/newKey -kspwd 123456 cd newKey ~/tmp/kvroot/newKey)=> ls -R security ./security: client.security security.xml store.trust temp.cert client.trust store.keys store.wallet ./security/store.wallet: cwallet.sso (~/tmp/kvroot/newKey)=>
- 新しいキーを作成したSNノードで、次のように
config merge-trust
コマンドを使用して、トラストストア・エントリをマージします。その後、NoSQL開発環境から続行します。java -jar <KVHOME>/lib/kvstore.jar securityconfig \ config merge-trust -root <standard config dir> \ -source-root <new config dir> java -jar $KVHOME/lib/kvstore.jar securityconfig config merge-trust -root $KVROOT1 -source-root /Users/my_name/tmp/kvroot/newKey cd $KVROOT1/security (~/tmp/kvroot/kvroot1/security)=> keytool -list -keystore store.trust Enter keystore password: <No password was needed for this Test, so we just pressed Enter> ***************** WARNING WARNING WARNING ****************** * The integrity of the information stored in your keystore * * has NOT been verified! In order to verify its integrity, * * you must provide your keystore password. * ***************** WARNING WARNING WARNING ****************** Keystore type: JKS Keystore provider: SUN Your keystore contains 2 entries mykey_2, Feb 6, 2018, trustedCertEntry, Certificate fingerprint (SHA1): A3:75:F2:97:25:20:F9:AD:52:61:71:8F:6B:7E:B1:BB:E8:54:D1:7A mykey, Feb 6, 2018, trustedCertEntry, Certificate fingerprint (SHA1): 89:71:8C:F1:6D:7E:25:D7:AD:C4:7E:23:8C:09:0D:AC:CE:AE:3F:67
ノート:
複数ストレージ・ノード・デプロイメントでは、新しい構成(セキュリティ・ディレクトリとそのコンテンツ)を各ストレージ・ノード・ホストの新しい構成ディレクトリにコピーし、各ホストに対して、説明したとおりにmerge-trust
を実行する必要があります。 - SSLキーを更新するには、次のように、新しいキー(SN1上)をすべてのSNにマージします。
(~/tmp/kvroot/kvroot1/security)=> java -jar $KVHOME/lib/kvstore.jar securityconfig config merge-trust -root $KVROOT2 -source-root /Users/my_name/tmp/kvroot/newKey Configuration updated. (~/tmp/kvroot/kvroot1/security)=> java -jar $KVHOME/lib/kvstore.jar securityconfig config merge-trust -root $KVROOT3 -source-root /Users/my_name/tmp/kvroot/newKey Configuration updated. (~/tmp/kvroot/kvroot2/security)=> keytool -list -keystore store.trust Enter keystore password: ***************** WARNING WARNING WARNING ****************** * The integrity of the information stored in your keystore * * has NOT been verified! In order to verify its integrity, * * you must provide your keystore password. * ***************** WARNING WARNING WARNING ****************** Keystore type: JKS Keystore provider: SUN Your keystore contains 2 entries mykey_2, Feb 6, 2018, trustedCertEntry, Certificate fingerprint (SHA1): A3:75:F2:97:25:20:F9:AD:52:61:71:8F:6B:7E:B1:BB:E8:54:D1:7A mykey, Feb 6, 2018, trustedCertEntry, Certificate fingerprint (SHA1): 89:71:8C:F1:6D:7E:25:D7:AD:C4:7E:23:8C:09:0D:AC:CE:AE:3F:67 (~/tmp/kvroot)=> cd kvroot3/security (~/tmp/kvroot/kvroot3/security)=> keytool -list -keystore store.trust Enter keystore password: ***************** WARNING WARNING WARNING ****************** * The integrity of the information stored in your keystore * * has NOT been verified! In order to verify its integrity, * * you must provide your keystore password. * ***************** WARNING WARNING WARNING ****************** Keystore type: JKS Keystore provider: SUN Your keystore contains 2 entries mykey_2, Feb 6, 2018, trustedCertEntry, Certificate fingerprint (SHA1): A3:75:F2:97:25:20:F9:AD:52:61:71:8F:6B:7E:B1:BB:E8:54:D1:7A mykey, Feb 6, 2018, trustedCertEntry, Certificate fingerprint (SHA1): 89:71:8C:F1:6D:7E:25:D7:AD:C4:7E:23:8C:09:0D:AC:CE:AE:3F:67
- 更新された
client.trust
ファイル(マージされたキーを含むファイル)を各ホストのセキュリティ・ディレクトリにコピーして、クライアントがストアへのアクセスに使用できるようにします。ノート:
store.trust
ファイルとclient.trust
ファイルのコンテンツは同じですが、使用方法が異なります。client.trust
は、クライアントとサーバー間の通信を認証する場合に使用し、store.trust
は、サーバー間の通信を認証する場合に使用します。 - NoSQL開発環境で、次のように、
client.trust
ファイルをSN 3から取得します。(~/tmp/kvroot/kvroot3/security)=> cat client.security #Security property settings for communication with KVStore servers #Tue Feb 06 15:03:40 CST 2018 oracle.kv.ssl.trustStore=client.trust oracle.kv.transport=ssl oracle.kv.ssl.protocols=TLSv1.2 oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL)
- すべてのレプリケーション・ノードがオンラインであることを確認します(管理CLIの
ping
またはverify configuration
コマンドを使用)。 - 各ストレージ・ノードを順番に再起動します。その際、各SNが完全に稼働していることを確認してから次のSNを再起動してください。次のコマンドを使用します。
java -jar <KVHOME>/lib/kvstore.jar stop -root KVROOT java -jar <KVHOME>/lib/kvstore.jar start -root KVROOT&
- NoSQL開発環境から続行して、管理CLIを起動し、
ping
コマンドを使用してすべてのRNが稼働していることを確認します。(~/tmp/kvroot/newKey)=> java -jar $KVHOME/lib/kvstore.jar runadmin -host localhost -port 5000 -security $KVROOT1/security/client.security Logged in admin as anonymous kv-> ping Pinging components of store HSRStore based upon topology sequence #18 10 partitions and 3 storage nodes Time: 2018-02-07 00:34:37 UTC Version: 12.2.4.5.12 Shard Status: healthy:1 writable-degraded:0 read-only:0 offline:0 Admin Status: healthy Zone [name=Austin id=zn1 type=PRIMARY allowArbiters=false] RN Status: online:3 offline:0 max DelayMillis:1 max CatchupTimeSecs:0 Storage Node [sn1] on localhost:5000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Admin [admin1] Status: RUNNING,MASTER Rep Node [rg1-rn1] Status: RUNNING,MASTER sequenceNumber:63 haPort:5011 Storage Node [sn2] on localhost:6000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn2] Status: RUNNING,REPLICA sequenceNumber:63 haPort:6010 delayMillis:1 catchupTimeSecs:0 Storage Node [sn3] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:63 haPort:7010 delayMillis:? catchupTimeSecs:?
- 各SNを順番に再起動します。次のSNに進む前に、最後に再起動したSNが完全に稼働していることを確認してください。
java -jar $KVHOME/lib/kvstore.jar stop -root /Users/my_name/tmp/kvroot/kvroot1 (~/hg/kv/kvstore)=> java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT1 & kv-> ping Pinging components of store HSRStore based upon topology sequence #18 10 partitions and 3 storage nodes Time: 2018-02-06 21:23:56 UTC Version: 12.2.4.5.12 Shard Status: healthy:1 writable-degraded:0 read-only:0 offline:0 Admin Status: healthy Zone [name=Austin id=zn1 type=PRIMARY allowArbiters=false] RN Status: online:3 offline:0 maxDelayMillis:0 maxCatchupTimeSecs:0 Storage Node [sn1] on localhost:5000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Admin [admin1] Status: RUNNING,MASTER Rep Node [rg1-rn1] Status: RUNNING,REPLICA sequenceNumber:62 haPort:5011 delayMillis:0 catchupTimeSecs:0 Storage Node [sn2] on localhost:6000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn2] Status: RUNNING,MASTER sequenceNumber:62 haPort:6010 Storage Node [sn3] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:62 haPort:7010 delayMillis:0 catchupTimeSecs:0 Rep Node [rg1-rn1] Status: RUNNING,REPLICA is up, now restart the next SN (~/hg/kv/kvstore)=> java -jar $KVHOME/lib/kvstore.jar stop -root /Users/my_name/tmp/kvroot/kvroot2 kv->ping Pinging components of store HSRStore based upon topology sequence #18 10 partitions and 3 storage nodes Time: 2018-02-06 21:25:39 UTC Version: 12.2.4.5.12 Shard Status: healthy:0 writable-degraded:1 read-only:0 offline:0 Admin Status: healthy Zone [name=Austin id=zn1 type=PRIMARY allowArbiters=false] RN Status: online:2 offline:1 maxDelayMillis:? maxCatchupTimeSecs:? Storage Node [sn1] on localhost:5000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Admin [admin1] Status: RUNNING,MASTER Rep Node [rg1-rn1] Status: RUNNING,REPLICA sequenceNumber:62 haPort:5011 Storage Node [sn2] on localhost:6000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] UNREACHABLE Rep Node [rg1-rn2] Status: UNREACHABLE Storage Node [sn3] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:62 haPort:7010 delayMillis:? catchupTimeSecs:? (~/hg/kv/kvstore)=> java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT2 & kv->ping Pinging components of store HSRStore based upon topology sequence #18 10 partitions and 3 storage nodes Time: 2018-02-06 21:26:09 UTC Version: 12.2.4.5.12 Shard Status: healthy:1 writable-degraded:0 read-only:0 offline:0 Admin Status: healthy Zone [name=Austin id=zn1 type=PRIMARY allowArbiters=false] RN Status: online:3 offline:0 maxDelayMillis:1 maxCatchupTimeSecs:0 Storage Node [sn1] on localhost:5000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Admin [admin1] Status: RUNNING,MASTER Rep Node [rg1-rn1] Status: RUNNING,REPLICA sequenceNumber:63 haPort:5011 Storage Node [sn2] on localhost:6000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn2] Status: RUNNING,REPLICA sequenceNumber:63 haPort:6010 delayMillis:1 catchupTimeSecs:0 Storage Node [sn3] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:63 haPort:7010 delayMillis:1 catchupTimeSecs:0
- 次のように、SN2が稼働してからSN3を再起動します。
(~/hg/kv/kvstore)=> java -jar $KVHOME/lib/kvstore.jar stop -root /Users/my_name/tmp/kvroot/kvroot3 kv-> ping Pinging components of store HSRStore based upon topology sequence #18 10 partitions and 3 storage nodes Time: 2018-02-06 21:26:43 UTC Version: 12.2.4.5.12 Shard Status: healthy:0 writable-degraded:1 read-only:0 offline:0 Admin Status: healthy Zone [name=Austin id=zn1 type=PRIMARY allowArbiters=false] RN Status: online:2 offline:1 maxDelayMillis:1 maxCatchupTimeSecs:0 Storage Node [sn1] on localhost:5000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Admin [admin1] Status: RUNNING,MASTER Rep Node [rg1-rn1] Status: RUNNING,MASTER sequenceNumber:63 haPort:5011 Storage Node [sn2] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn2] Status: RUNNING,REPLICA sequenceNumber:63 haPort:6010 delayMillis:1 catchupTimeSecs:0 Storage Node [sn3] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] UNREACHABLE Rep Node [rg1-rn3] Status: UNREACHABLE (~/hg/kv/kvstore)=> java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT3 & kv-> ping Pinging components of store HSRStore based upon topology sequence #18 10 partitions and 3 storage nodes Time: 2018-02-06 21:27:15 UTC Version: 12.2.4.5.12 Shard Status: healthy:1 writable-degraded:0 read-only:0 offline:0 Admin Status: healthy Zone [name=Austin id=zn1 type=PRIMARY allowArbiters=false] RN Status: online:3 offline:0 maxDelayMillis:1 maxCatchupTimeSecs:0 Storage Node [sn1] on localhost:5000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Admin [admin1] Status: RUNNING,MASTER Rep Node [rg1-rn1] Status: RUNNING,MASTER sequenceNumber:63 haPort:5011 Storage Node [sn2] on localhost:6000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn2] Status: RUNNING,REPLICA sequenceNumber:63 haPort:6010 delayMillis:1 catchupTimeSecs:0 Storage Node [sn3] on localhost:7000 Zone: [name=Austin id=zn1 type=PRIMARY allowArbiters=false] Status: RUNNING Ver: 12cR2.4.5.12 2018-02-06 08:51:55 UTC Build id: 0d00330822fc Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:63 haPort:7010 delayMillis:? catchupTimeSecs:?
- 新しく生成されたキーのセキュリティ・ディレクトリから各ストレージ・ノードのセキュリティ・ディレクトリに、
store.keys
ファイルをコピーします。これにより、新しく生成されたキーがコピーされ、サーバー・ノード(SN)の古いキーと置き換えられます。次に、すべてのレプリケーション・ノードがオンラインであることを確認し、次のコマンドを使用して、各ストレージ・ノードを1つずつ再起動します。java -jar <KVHOME>/lib/kvstore.jar stop -root KVROOT java -jar <KVHOME>/lib/kvstore.jar start -root KVROOT&
これらのコマンドにより、新しく生成されたキーがコピーされ、サーバー・ノード(SN)の古いキーと置き換えられます。その後、各SNを再起動します。
(~/tmp/kvroot/kvroot3/security)=> cp /Users/my_name/tmp/kvroot/newKey/security/store.keys /Users/my_name/tmp/kvroot/kvroot1/security/. (~/tmp/kvroot/kvroot3/security)=> cp /Users/my_name/tmp/kvroot/newKey/security/store.keys /Users/my_name/tmp/kvroot/kvroot2/security/. (~/tmp/kvroot/kvroot3/security)=> cp /Users/my_name/tmp/kvroot/newKey/security/store.keys /Users/my_name/tmp/kvroot/kvroot3/security/. java -jar <KVHOME>/lib/kvstore.jar stop -root KVROOT java -jar <KVHOME>/lib/kvstore.jar start -root KVROOT&
- 各ストレージ・ノードで、廃止された証明書
mykey
をstore.trust
から削除します。その後、次のコマンドを使用して、新しい証明書mykey_2
の名前をmykey
に変更します。keytool -delete -keystore KVROOT/security/store.trust \ -alias mykey keytool -changealias -keystore \ KVROOT/security/store.trust -alias mykey_2 -destalias mykey
このステップにより、古い証明書(
mykey
)が削除され、新しく作成された証明書myKey_2
の名前が前のキーの名前であるmykey
に変更されます。これにより、新しく生成されたmyKey
と呼ばれる1つのキーが存在することになります。
次のコマンドを使用して、新しい証明書が唯一使用されていることを検証します。(~/tmp/kvroot/kvroot3/security)=> keytool -delete -keystore $KVROOT1/security/store.trust -alias mykey Enter keystore password: (~/tmp/kvroot/kvroot3/security)=> keytool -delete -keystore $KVROOT2/security/store.trust -alias mykey Enter keystore password: (~/tmp/kvroot/kvroot3/security)=> keytool -delete -keystore $KVROOT3/security/store.trust -alias mykey Enter keystore password: (~/tmp/kvroot/kvroot3/security)=> keytool -changealias -keystore $KVROOT3/security/store.trust -alias mykey_2 -destalias mykey (~/tmp/kvroot/kvroot3/security)=> keytool -changealias -keystore $KVROOT2/security/store.trust -alias mykey_2 -destalias mykey (~/tmp/kvroot/kvroot3/security)=> keytool -changealias -keystore $KVROOT1/security/store.trust -alias mykey_2 -destalias mykey
keytool -list -keystore KVROOT/security/store.trust (~/tmp/kvroot/newKey/security)=> keytool -list -keystore store.keys Enter keystore password: Keystore type: JKS Keystore provider: SUN
キーストアには、正しい1つのエントリが含まれています。
shared, Feb 6, 2018, PrivateKeyEntry, Certificate fingerprint (SHA1): A3:75:F2:97:25:20:F9:AD:52:61:71:8F:6B:7E:B1:BB:E8:54:D1:7A