PKCS12のJavaキーストアの使用に関するガイドライン
Oracle NoSQL Databaseでは、PKCS12形式のJavaキーストアがサポートされています。22.1リリース以降、NoSQL Databaseでは、makebootconfigまたはsecurityconfigユーティリティによって作成されるデフォルトのセキュリティ構成のキーストア・タイプがPKCS12に切り替わっています。
ノート:
既存のセキュリティ構成のキーストア形式を、業界標準の形式であるPKCS12に切り替えることをお薦めします。デフォルトのセキュリティ構成
リリース22.1以降のデフォルトのセキュリティ構成では、データベース・サーバーのキーストアおよびトラストストア(通常はそれぞれstore.keysおよびstore.trustという名前)はPKCS12形式で作成され、-kspwdを使用して指定したパスワードによって保護されます。
クライアント・アプリケーションで使用されるトラストストアであるclient.trustは、-ctspwdを使用してパスワードを指定しないと、デフォルトで、PKCS12形式でパスワードなしで作成されます。また、構成ユーティリティの実行に使用されるJavaでパスワード不要PKCS12ストアがサポートされていない場合は、ユーティリティによって、JKS形式でclient.trustが作成されるようにフォールバックされます。パスワード不要PKCS12がサポートされているJavaバージョンでは、セキュリティ・プロパティkeystore.pkcs12.certProtectionAlgorithmおよびkeystore.pkcs12.macAlgorithmが使用可能になっている必要があります。この機能に必要な最小バージョンのJAVAは、JAVA 8の場合はJDK 8u301、JAVA 11の場合はJDK 11.0.12、およびJAVA 17の場合は最初のリリースです。
- oracle.kv.ssl.trustStorePassword
- oracle.kv.ssl.trustStorePasswordAlias
クライアント・アプリケーションで、ログイン・プロパティ・ファイル内でoracle.kv.ssl.trustStorePasswordプロパティを使用してパスワードを指定するか、外部パスワード・ストレージにパスワードを格納しoracle.kv.ssl.trustStorePasswordAliasプロパティを使用してその別名のみを指定できます。
#Security property settings for communication with KVStore servers using password
oracle.kv.ssl.trustStore=client.trust
oracle.kv.ssl.trustStoreType=PKCS12
oracle.kv.ssl.trustStorePassword=<client.trust password>
oracle.kv.ssl.protocols=TLSv1.3,TLSv1.2
oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL)
oracle.kv.transport=ssl
#Security property settings for communication with KVStore servers using password alias
oracle.kv.ssl.trustStore=client.trust
oracle.kv.ssl.trustStoreType=PKCS12
oracle.kv.ssl.trustStorePasswordAlias=cts
oracle.kv.ssl.protocols=TLSv1.3,TLSv1.2
oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL)
oracle.kv.transport=ssl
oracle.kv.auth.wallet.dir=<wallet_directory>
oracle.kv.auth.username=<user_name>
既存のセキュリティ構成のキーストア・タイプの更新
NoSQL Databaseリリース22.1より前のリリースで作成されたセキュリティ構成では、すべてのJavaキーストアがJKS形式で生成されます。JavaキーストアをPKCS12形式にアップグレードするには、次の手順を実行する必要があります。
- NoSQL Databaseストレージ・ノードの1つから既存のセキュリティ構成ディレクトリをコピーします。
- 次のコマンドを実行してキーストアをPKCS12形式に更新します。
このコマンドでは、NoSQL Databaseサーバーで使用される既存のキーストア(store.keys)およびトラストストア(store.trust)がPKCS12形式に変換され、既存の構成内のストアのキーストア・パスワードが再使用されます。構成の作成と同様に、このコマンドでも、-ctspwdを使用してパスワードを指定しないとパスワード不要の新しいclient.trustがPKCS12形式で作成されます。Javaでパスワード不要PKCS12ストアがサポートされていない場合は、JKS形式のclient.trustの作成にフォールバックされます。java -jar kvstore.jar securityconfig config update -secdir <security dir> -kstype PKCS12 [-ctspwd <client.trust password>]
- セキュリティ構成表示コマンドを実行して、ストア・タイプがPKCS12形式に更新されていることを確認します。
java -jar kvstore.jar securityconfig config show -secdir security Security parameters: certMode=shared internalAuth=ssl keystore=store.keys keystorePasswordAlias=keystore keystoreType=PKCS12 securityEnabled=true truststore=store.trust truststoreType=PKCS12 walletDir=store.wallet internal Transport parameters: ... Keystore: security/store.keys Keystore type: PKCS12 Keystore provider: SUN Your keystore contains 1 entry shared, Feb 11, 2022, PrivateKeyEntry, Certificate fingerprint (SHA-256): AA:98:B8:C6... Keystore: security/store.trust Keystore type: PKCS12 Keystore provider: SUN Your keystore contains 1 entry mykey, Feb 11, 2022, trustedCertEntry, Certificate fingerprint (SHA-256): AA:98:B8:C6...
- 構成ディレクトリ内に、名前に.oldという接尾辞が付いた、各Javaキーストアのバックアップがあることを確認します。
ls kvroot/security store.wallet store.trust.old store.trust store.keys.old store.keys security.xml client.trust.old client.trust client.security
- 基本ログイン・プロパティ・ファイル
client.security
がPKCS12形式に更新されていることを確認します。cat security/client.security #Security property settings for communication with KVStore servers #Fri Feb 11 10:59:39 PST 2022 oracle.kv.ssl.trustStore=client.trust oracle.kv.ssl.trustStoreType=PKCS12 oracle.kv.ssl.protocols=TLSv1.2 oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL) oracle.kv.transport=ssl
- 更新されたセキュリティ・ディレクトリを各サーバー・ノード(ストレージ・ノード)にコピーし、古いセキュリティ構成ディレクトリを置き換えます。次に、すべてのレプリケーション・ノードがオンラインであることを確認し、各ストレージ・ノードを順番に再起動します。次の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: 2024-04-05 08:52:02 UTC Version: 24.1.11 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: 24.1.11 2024-04-05 08:52:02 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: 24.1.11 2024-04-05 08:52:02 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: 24.1.11 2024-04-05 08:52:02 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: 2024-04-05 08:52:02 UTC Version: 24.1.11 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: 24.1.11 2024-04-05 08:54:02 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: 24.1.11 2024-04-05 08:54:02 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: 2024-04-05 08:55:02 UTC Version: 24.1.11 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: 24.1.11 2024-04-05 08:55:02 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: 24.1.11 2024-04-05 08:55:02 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: 24.1.11 2024-04-05 08:55:02 UTC Build id: 0d00330822fc Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:63 haPort:7010 delayMillis:1 catchupTimeSecs:0
SSLキーおよび証明書の更新
SSLキーおよび証明書の更新ガイドラインを参照してSSLキーおよび証明書を新しいセキュリティ構成で更新するときには、merge-trustコマンドにより、NoSQL Databaseサーバーで使用されるマージ済トラストストア(store.trust)がPKCS12形式に自動変換され、既存のセキュリティ構成の元のキーストア・パスワードによって保護されます。また、-ctspwdを使用してパスワードを指定しなかった場合は、パスワード不要の新しいclient.trustがPKCS12形式で作成されます。merge-trust
コマンドの実行に使用されるJavaでパスワード不要PKCS12ストアがサポートされていない場合は、JKSのclient.trustの作成にフォールバックされます。
java -jar $KVHOME/lib/kvstore.jar
securityconfig config /
create -root /Users/my_name/tmp/kvroot/newKey
-kspwd 123456 -kstype JKS