SSLキーおよび証明書の更新ガイドライン
サーバーが使用する証明書が期限切れになるか、有効でなくなった場合は、SSLキーおよび証明書を置き換えることが必要になることがあります。この項では、このタスクを完了するための手順について説明します。
以降の指示では、自己署名証明書および関連付けられるキー(Oracle NoSQL Databaseのデフォルト)について説明します。または、既存のデフォルト・セキュア・インストール用の外部証明書の構成ガイドラインで説明されているように、外部証明書を使用することもできます。
plan update-tls-credentials
コマンドを使用します。- 各SNで手動プロセスを使用して新しいSSLキーおよび証明書を作成し、トラストストア・エントリをマージし、
store.keys
ファイルをセキュリティ・ディレクトリにコピーし、必要に応じてローリング再起動の一環として各SNを順番に停止および起動します。SNの再起動が必要となるのは、データ・ストアがまだOracle NoSQL Database 24.4以降に完全にアップグレードされていない場合のみとなりました。
plan
コマンドの使用
plan update-tls-credentials
コマンドは、データ・ストア内のストレージ・ノード・エージェント(SNA)で使用される共有TLS (Transport Layer Security、旧SSL)資格証明のセットに対する資格証明の更新を取得してインストールします。このプランは、すべてのSNAが同じ資格証明を共有するデータ・ストアでのみ使用し、ホスト固有の資格証明を持つデータ・ストアでは使用しないでください。plan update-tls-credentials [-retrieve-only|-install-only] [-force]
planコマンドは、要件に応じて様々な方法で使用できます。-
新しい資格証明を手動でコピーし、
plan update-tls-credentials
コマンドを-install-only
フラグとともに使用できます。これは、デフォルトで使用できる最良の選択肢です。 -
SSL資格証明およびキーの更新プロセス全体を自動化する必要がある場合は、オプションまたはフラグを指定せずに
plan update-tls-credentials
コマンドを使用できます。そうすると、planコマンドによって資格証明が取得され、インストールされます。 - 資格証明を取得し、後でインストールする予定の場合は、
plan update-tls-credentials
コマンドを-retrieve-only
フラグとともに使用できます。
SSLキーおよび証明書の更新の手動プロセス
SSLキー/証明書の更新には、次のステップが含まれます。- ストレージ・ノードに新しいキー/証明書のペアを作成します。
- 新しいキー/証明書のペアをすべてのストレージ・ノードにコピーし、新しい証明書を既存のトラスト・ストア・ファイル(
client.trust
とstore.trust
)にマージします。 - 必要に応じて、各ストレージ・ノードを順番に再起動します。SNを再起動する必要があるのは、データ・ストアがまだOracle NoSQL Database 24.4以降に完全にアップグレードされていない場合のみです。すべてのSNがアップグレードされると、再起動しなくてもキーおよび証明書の変更が認識されます。
- マージされたエントリとともに
client.trust
を各クライアントにコピーします。 - マージされたエントリを含む
store.keys
を各ストレージ・ノードにコピーし、各ストレージ・ノードを順番に再起動します(2回目)。このステップは、Oracle NoSQL Database 24.3以前を実行しているSNに対してのみ必要です。 - すべてのストレージ・ノードの
store.trust
内の古い証明書を削除します。 - 新しい証明書のみが使用されていることを確認します。
ノート:
次で使用されているOracle NoSQL Database環境は、容量が3、レプリケーション係数(RF)が3で3つのストレージ・ノードにデプロイされています。新しいSSLキー証明書の作成
- 1つ目のストレージ・ノード(SN1)で、キーを格納する一時ディレクトリを作成します。
cd /users/user_name/tmp/kvroot/ mkdir newKey
SN1で、securityconfig
ユーティリティを実行して、新しいディレクトリnewKey
に新しいキー/証明書ペアを作成します。新しい構成では、現在の構成と同じキーストア・パスワードを指定する必要があります。-kspwd
オプションでパスワードを指定しない場合、ユーティリティによってパスワードの設定を求められます。java -jar $KVHOME/lib/kvstore.jar securityconfig \ config create -root /users/user_name/tmp/kvroot/newKey -kspwd 123456
出力:cd /users/user_name/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
- SN1で、次のようにconfig merge-trustコマンドを使用してトラストストア・エントリをマージします。このコマンドの実行後は、
client.trust
ファイルとstore.trust
ファイルに、2つのSSL証明書エントリが含まれるようになります。java -jar $KVHOME/lib/kvstore.jar securityconfig \ config merge-trust -root $KVROOT -source-root \ /users/user_name/tmp/kvroot/newKey
keytool -list
を使用してキーストア内のエントリをリストします。
出力:cd $KVROOT/security keytool -list -keystore store.trust Enter keystore password: *********
Keystore type: JKS Keystore provider: SUN Your keystore contains 2 entries mykey_2, Feb 6, 2024,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, 2024,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
ファイルと同じ2つのエントリが含まれています。複数ストレージ・ノード・デプロイメントでは、新しい構成(セキュリティ・ディレクトリとそのコンテンツ)を各ストレージ・ノード・ホストの新しい構成ディレクトリにコピーし、各ホストに対して、説明したとおりに
merge-trust
を実行する必要があります。SN2とSN3で、次のことを実行します:cd /users/user_name/tmp/kvroot/ mkdir newKey
ディレクトリ
newKey
の内容をSN1からSN2とSN3の/users/user_name/tmp/kvroot/newKey
ディレクトリにコピーします。SN2とSN3で、次に示すようにオプションで、config merge-trust
コマンドを使用してトラストストア・エントリをマージします。java -jar $KVHOME/lib/kvstore.jar securityconfig \ config merge-trust -root $KVROOT \ -source-root /users/user_name/tmp/kvroot/newKey
keytool
コマンドを使用してSN2とSN3にあるキーストア内のエントリをリストできます(前述のSN1の場合と同様)。 - 自己署名証明書を使用して実行されているOracle NoSQL Databaseでは、クライアント側アプリケーションを、マージされたクライアント・トラストストアの使用に切り替えた後に、古い資格証明または新しい資格証明を使用してデータ・ストアに接続できます。更新手順のこの時点でクライアントに変更を加えることをお薦めします。これによって、クライアントが、更新プロセス全体にわたりそのデータ・ストアに接続できるようになります。マージされたエントリ(2つの証明書エントリ)を含む
client.trust
ファイルを各クライアントにコピーし、クライアント・アプリケーションで使用されている既存のclient.trust
ファイルを置き換える必要があります。更新が完了した後、クライアントで、古い証明書がクリアされるように、新しいトラストストアの使用に切り替える必要があります。scp <SN1_host>:$KVROOT/security/client.trust \ <client_host>:<directory_client.trust>/client.trust
ノート:
client.trust
は、クライアントとサーバー間の通信を認証する場合に使用し、store.trust
は、サーバー間の通信を認証する場合に使用します。 - 各ストレージ・ノードを順番に停止し起動します。その際は、各SNが完全に起動されたことを確認してから次のSNを再起動してください。データ・ストアではSSL証明書を更新している間のストレージ・ノードの再起動中に定足数を維持する必要があるため、一度に1つのSNを再起動する必要があります。
再起動後に、そのストレージ・ノードで、マージされた
store.trust
から新しい証明書と古い証明書が両方ロードされます。そのため、そのストレージ・ノードでは、新しいSSL資格証明と古いSSL資格証明を両方認識できます。まだ再起動されていないストレージ・ノードでは、引き続き、store.trust
ファイルからの古いSSL資格証明が使用されます。各ストレージ・ノード(SN1、SN2およびSN3)で、次のステップを実行します:java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT&
管理CLIを起動し、ping
コマンドを使用して、すべてのレプリケーション・ノード(RN)が稼働中であることを確認します。java -jar $KVHOME/lib/kvstore.jar runadmin -host $HOSTNAME -port 5000 \ -security $KVROOT/security/client.security
匿名で管理にログインしましたkv-> ping
ノート:
SNを再起動する必要があるのは、データ・ストアがまだOracle NoSQL Database 24.4以降に完全にアップグレードされていない場合のみです。すべてのSNがアップグレードされると、再起動しなくてもキーおよび証明書の変更が認識されます。 -
store.keys
ファイルには、生成された秘密キーが含まれています。上で使用したmerge-trust
ユーティリティでは、store.trust
内の証明書のみがマージされ、秘密キーはマージされません。NoSQL Databaseで新しいSSL秘密キーが使用されるようにするには、次に示すように、新しいstore.keys
をすべてのストレージ・ノード内の$KVROOTの下のsecurityディレクトリにコピーする必要があります。各ストレージ・ノード(SN1、SN2およびSN3)で、次のステップを実行します:
store.keys
ファイルをsecurityディレクトリにコピーし、ストレージ・ノードを停止してから再起動します。各ストレージ・ノードを、ローリング再起動として順番に停止し起動します。その際は、各SNが完全に起動されたことを確認してから次のSNを再起動してください。一度に1つのSNを再起動する必要があります。これは、データ・ストアでその再起動中に定足数を維持する必要があるためです。cp /users/user_name/tmp/kvroot/newKey/security/store.keys $KVROOT/security/. java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT&
ノート:
SNを再起動する必要があるのは、データ・ストアがまだOracle NoSQL Database 24.4以降に完全にアップグレードされていない場合のみです。すべてのSNがアップグレードされると、再起動しなくてもキーおよび証明書の変更が認識されます。 - 各ストレージ・ノードで、廃止された証明書
mykey
をstore.trust
から削除します。その後、新しい証明書の名前mykey_2
をmykey
に変更します。各ストレージ・ノード(SN1、SN2およびSN3)で、次のステップを実行します:
mykey
という名前の古い証明書を削除します。keytool -delete -keystore $KVROOT/security/store.trust -alias mykey Enter keystore password:
新しく作成した証明書の名前mykey_2
を、前のキーの名前であるmykey
に変更します。keytool -changealias -keystore $KVROOT/security/store.trust \ -alias mykey_2 -destalias mykey
これで、mykey
という、新しく生成されたキー1つのみが存在するようになります。次のコマンドを使用して、その新しい証明書1つのみが示されることを確認します:keytool -list -keystore $KVROOT/security/store.trust Enter keystore password:
Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry mykey, Feb 6, 2024,trustedCertEntry, Certificate fingerprint (SHA1): A3:75:F2:97:25:20:F9:AD:52:61:71:8F:6B:7E:B1:BB:E8:54:D1:7A
これで、データ・ストア上のSSLキーおよび証明書が更新されました。
SSLキーおよび証明書の更新中の追加検証
データ・ストアのSSLキーおよび証明書を更新すると、次の追加チェックが実行されます。これらのチェックは、新しい資格証明に関する潜在的な問題を検出することを目的としています。
- キーストアおよびトラストストア・ファイルのパスワードは、データ・ストアで現在使用中のキーストアおよびトラストストアのパスワードと同じである必要があります。
keystoreType
およびtruststoreType
パラメータを使用して指定したキーストアおよびトラストストア・ファイルのタイプは、ファイルの正確なタイプと一致する必要があります。-
キーストアには、
keystoreSigPrivateKeyAlias
パラメータを使用して指定した別名のエントリが必要です。この別名は、署名の作成に使用されるキー・ペアを識別します。このキー・ペアに対応する証明書は、トラストストア内の証明書で正常に検証される必要があります。この場合、キーストアとトラストストアには同じ証明書が含まれている必要がありますが、トラストストアには複数の証明書を含めることができます(たとえば、証明書チェーンの一部である場合)。 - トラストストアには、
truststoreSigPublicKeyAlias
パラメータを使用して指定した別名のエントリが必要です。この別名は、署名の検証に使用される証明書を識別します。関連付けられた証明書が正常に検証され、キーストア内のkeystoreSigPrivateKeyAlias
エントリの証明書と一致する必要があります。 - キーストアには、任意のトランスポート・タイプに指定したすべての
serverKeyAlias
パラメータのエントリが必要です。この別名は、ストア・サービスで使用されるキー・ペアを識別します。何も指定していない場合は、別名shared
が使用されます。このキー・ペアに対応する証明書は、トラストストア内の証明書で正常に検証される必要があります。ノート:
トラストストアには、複数の証明書を含めることができます(たとえば、証明書チェーンの一部である場合)。また、キーストア証明書の検証では、トラストストア内に複数の証明書が必要になる場合もあります。 - すべての
serverKeyAlias
エントリは、関連するclientIdentityAllowed
パラメータの検証要件を満たす必要があります(ある場合)。 - パラメータ
clientAuthRequired
がtrueのトランスポートの場合、キーストアには、指定したすべてのclientKeyAlias
パラメータのエントリが必要です。clientkeyAlias
パラメータは、直接接続のJavaクライアントまたはプロキシで使用されるキー・ペアを識別します。何も指定していない場合は、別名shared
が使用されます。このキー・ペアに対応する証明書は、トラストストア内の証明書で正常に検証される必要があります。 - すべての
clientKeyAliasentries
は、関連するserverIdentityAllowed
パラメータの検証要件を満たす必要があります(ある場合)。