SSLキーおよび証明書の更新ガイドライン

サーバーが使用する証明書が期限切れになるか、有効でなくなった場合は、SSLキーおよび証明書を置き換えることが必要になることがあります。この項では、このタスクを完了するための手順について説明します。

以降の指示では、自己署名証明書および関連付けられるキー(Oracle NoSQL Databaseのデフォルト)について説明します。または、既存のデフォルト・セキュア・インストール用の外部証明書の構成ガイドラインで説明されているように、外部証明書を使用することもできます。

SSLキー/証明書の更新には、次のステップが含まれます。
  1. ストレージ・ノードに新しいキー/証明書のペアを作成します。
  2. 新しいキー/証明書のペアをすべてのストレージ・ノードにコピーし、新しい証明書を既存のトラスト・ストア・ファイル(client.truststore.trust)にマージします。
  3. 各ストレージ・ノードを順番に再起動します。
  4. マージされたエントリとともにclient.trustを各クライアントにコピーします。
  5. マージされたエントリを含むstore.keysを各ストレージ・ノードにコピーし、各ストレージ・ノードを順番に再起動します(2回目)。
  6. すべてのストレージ・ノードのstore.trust内の古い証明書を削除します。
  7. 新しい証明書のみが使用されていることを確認します。

実行中のストアの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キー証明書の作成

  1. 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)=>
  2. 新しいキーを作成した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を実行する必要があります。
  3. 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 
    
    
  4. 更新されたclient.trustファイル(マージされたキーを含むファイル)を各ホストのセキュリティ・ディレクトリにコピーして、クライアントがストアへのアクセスに使用できるようにします。

    ノート:

    store.trustファイルとclient.trustファイルのコンテンツは同じですが、使用方法が異なります。client.trustは、クライアントとサーバー間の通信を認証する場合に使用し、store.trustは、サーバー間の通信を認証する場合に使用します。
  5. 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)
     
  6. すべてのレプリケーション・ノードがオンラインであることを確認します(管理CLIのpingまたはverify configurationコマンドを使用)。
  7. 各ストレージ・ノードを順番に再起動します。その際、各SNが完全に稼働していることを確認してから次のSNを再起動してください。次のコマンドを使用します。
    
    java -jar <KVHOME>/lib/kvstore.jar stop -root KVROOT 
     java -jar <KVHOME>/lib/kvstore.jar start -root KVROOT&
  8. 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:?
    
  9. 各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
    
    
  10. 次のように、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:? 
    
  11. 新しく生成されたキーのセキュリティ・ディレクトリから各ストレージ・ノードのセキュリティ・ディレクトリに、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& 
    
  12. 各ストレージ・ノードで、廃止された証明書mykeystore.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