第3章 認証情報のセキュアな保存
JBoss EAP では、設定ファイル外で機密文字列を暗号化できます。これらの文字列はキーストアに格納でき、その後アプリケーションおよび検証システムに対して復号化されます。機密文字列は以下のいずれかに格納できます。
- クレデンシャルストア: JBoss EAP 7.1 で導入されるクレデンシャルストアは、ストレージファイルで暗号化することで、機密およびプレーンテキストの文字列を安全に保護できます。各 JBoss EAP サーバーに複数のクレデンシャルストアを含めることができます。
- パスワード vault: レガシー設定で使用されると、パスワード vault は Java キーストアを使用して、設定ファイル外に機密文字列を保存します。各 JBoss EAP サーバーには単一のパスワード vault のみを含めることができます。
EAP_HOME/standalone/configuration/
と EAP_HOME/domain/configuration/
の設定ファイルは、すべてデフォルトでは読み取り可能です。プレーンテキストパスワードを設定ファイルに保存せず、クレデンシャルストア または パスワード vault のいずれかに認証情報を配置することを強く推奨します。
設定ファイルにプレーンテキストのパスワードを配置する場合、これらのファイルは、限られたユーザーのみがアクセスできるようにする必要があります。JBoss EAP 7 を実行しているユーザーアカウントには少なくとも読み書き込みアクセスが必要です。
3.1. クレデンシャルストア
elytron
サブシステムで導入されたクレデンシャルストアは、セキュアなストレージおよび認証情報を使用できるようにします。クレデンシャルストアおよびその他の Elytron コンポーネントに関する背景情報は、Security Architectureガイドの 中核の概念およびコンポーネント を参照してください。
使用してパスワードやその他の機密文字列を保存するには、パスワード vault よりもクレデンシャルストアの使用が推奨されます。クレデンシャルストアを使用すると、外部ツールを使用せずに JBoss EAP 管理 CLI 内での認証情報の管理が容易になります。JBoss EAP サーバーごとに単一のパスワード vault という制限と比較すると、JBoss EAP サーバー内で複数のクレデンシャルストアを使用することもできます。
デフォルトのクレデンシャルストア実装は JCEKS キーストアファイルを使用して認証情報を保存します。新しいクレデンシャルストアを作成する場合、デフォルトの実装では、既存のキーストアファイルを参照したり、JBoss EAP で自動的に作成したりできます。現在、デフォルトの実装では、クリアテキストのパスワードのみを保存できます。
elytron
サブシステムは、ストレージと同じファイルを使用するためのチェックを複数のクレデンシャルストアに対して提供しません。複数のクレデンシャルストアに同じファイルを使用しないことを強く推奨します。また、リモートファイルシステムを使用してストレージファイルを共有することもお勧めします。
共有ストレージファイルを使用する必要がある場合は、アクセスしているクレデンシャルストアに read-only
フラグを必ず設定してください。これにより、ファイルが変更されなくなります。ファイルを外部から更新した後は、変更された値を反映するために各クレデンシャルストアをリロードする必要があります。管理対象ドメインでクレデンシャルストアを使用する場合は、同様のプロセスを実行する必要があります。
クレデンシャルストアには機密情報が含まれるため、そのストアを含むディレクトリーには、一部のユーザーのみがアクセスできるようにする必要があります。JBoss EAP を実行しているユーザーアカウントには少なくとも読み書き込みアクセスが必要です。
JBoss EAP はクレデンシャルストアファイルをメモリーに読み込み、変更を異なるタイミングで書き込みます。JBoss EAP プロセスを実行しているユーザーに、ストアファイルへのパーミッションが設定されるようにしてください。また、JBoss EAP の実行中にストアファイルを外部から変更しないようしてください。
ファイルが外部で変更されると、クレデンシャルストアで reload()
操作を使用して、JBoss EAP にストアファイルの内容を再ロードさせることができます。
3.1.1. クレデンシャルストアの作成
クレデンシャルストアを作成するには、新しいクレデンシャルストアファイルへのパスを定義し、クレデンシャルストアの暗号化に使用するマスターパスワードを指定する必要があります。このストアを含むディレクトリーは、一部のユーザーのみがアクセスできるようにする必要があります。JBoss EAP を実行しているユーザーアカウントには少なくとも読み書き込みアクセスが必要です。
JCEKS キーストアの実装は Java ベンダーごとに異なります。そのため、JBoss EAP インスタンスは JCEKS キーストアを生成した同じベンダーから JDK を実行する必要があります。
その他の JBoss EAP 設定でパスを指定するのと同様に、relative-to
属性を使用して別のものに相対パスを指定することもできます。
スタンドアロンサーバーのクレデンシャルストアの作成
以下の管理 CLI コマンドを使用してクレデンシャルストアを作成します。
/subsystem=elytron/credential-store=<store_name>:add(location="<path_to_store_file>", credential-reference={clear-text=<store_password>},create=true)
/subsystem=elytron/credential-store=<store_name>:add(location="<path_to_store_file>", credential-reference={clear-text=<store_password>},create=true)
たとえば、以下のコマンドでは my_store
という名前の新規ストアを作成し、jboss.server.data.dir/cred_stores/my_store.jceks
ファイルを作成します。
/subsystem=elytron/credential-store=my_store:add(location="cred_stores/my_store.jceks", relative-to=jboss.server.data.dir, credential-reference={clear-text=<secret_store_password>},create=true)
/subsystem=elytron/credential-store=my_store:add(location="cred_stores/my_store.jceks", relative-to=jboss.server.data.dir, credential-reference={clear-text=<secret_store_password>},create=true)
default
以外の実装を使用する場合は、クレデンシャルストアのタイプを明示的に定義できます。詳細は using a custom credential store implementation のセクションを参照してください。
管理対象ドメインでのクレデンシャルストアの作成
管理対象ドメインにクレデンシャルストアを作成できますが、最初に WildFly Elytron Tool を使用して認証情報を使用してリソースを準備する必要があります。管理対象ドメインに複数のホストコントローラーが存在する場合は、以下のオプションのいずれかを選択する必要があります。
- 各ホストコントローラーにクレデンシャルストアを作成します。
- 1 つのホストコントローラーから他のすべてのホストコントローラーに、credential-store をコピーします。
- ストレージファイルをネットワークファイルシステム (NFS) に配置し、作成されたすべての認証情報ストアリソースにそのファイルを使用します。
または、WildFly Elytron Tool を使用せずに、ホストコントローラーの認証情報を使用してクレデンシャルストアファイルを作成することもできます。
各サーバーでクレデンシャルストアリソースを定義する必要はありません。リソースが作成されるのと同じプロファイルを実行している各サーバーには、クレデンシャルストアファイルが含まれます。ストレージファイルは、サーバーデータディレクトリー relative-to=jboss.server.data.dir
にあります。
手順
- WildFly Elytron Tool を使用して、クレデンシャルストアのストレージファイルを作成します。詳細は、WildFly Elytron Tool を使用した認証情報ストアのオフライン作成および修正 を参照してください。
ストレージファイルを配布します。たとえば、
scp
を使用して各ホストコントローラーにファイルを配布したり、NFS に保存し、作成されたすべてのクレデンシャルストアリソースに使用したりできます。注記NFS に保存され、複数のホストコントローラーのリソースによって使用されるクレデンシャルストアファイルについては、クレデンシャルストアを読み取り専用モードで使用して一貫性を維持する必要があります。さらに、クレデンシャルストアファイルの絶対パスを指定します。
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<absolute_path_to_store_keystore>,credential-reference={clear-text="<store_password>"},create=false,modifiable=false)
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<absolute_path_to_store_keystore>,credential-reference={clear-text="<store_password>"},create=false,modifiable=false)
Copy to Clipboard Copied! オプション:プロファイルに credential-store リソースを定義する必要がある場合は、ストレージファイルを使用してリソースを作成します。
ストレージファイルからクレデンシャルストアリソースを作成する例。
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
Copy to Clipboard Copied! オプション: ホストコントローラーのクレデンシャルストアリソースを作成します。
ホストコントローラーのクレデンシャルストアリソースを作成する例。
/host=<host_controller_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
/host=<host_controller_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
Copy to Clipboard Copied!
3.1.2. 認証情報のクレデンシャルストアへの追加
新しい認証情報をクレデンシャルストアに追加するには、保存したい機密文字列にエイリアスを関連付けます。
クレデンシャルストアのエイリアスは、デフォルトで大文字と小文字を区別しません。保存されたエイリアスは小文字で表示されます。また、大文字と小文字の組み合わせを使用して参照できます。
カスタムクレデンシャルストア を使用すると、ケースの機密性はカスタム実装によって決定されます。
以下の管理 CLI コマンドは認証情報をクレデンシャルストアに追加します。
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias=ALIAS, secret-value="SENSITIVE_STRING")
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias=ALIAS, secret-value="SENSITIVE_STRING")
たとえば、エイリアス database-pw
のあるパスワードを 前のセクション で作成したストアに追加するには、以下を実行します。
/subsystem=elytron/credential-store=my_store:add-alias(alias=database-pw, secret-value="speci@l_db_pa$$_01")
/subsystem=elytron/credential-store=my_store:add-alias(alias=database-pw, secret-value="speci@l_db_pa$$_01")
管理対象ドメインのクレデンシャルストアに認証情報を追加する方法は、WildFly Elytron Tool を使用した認証情報のクレデンシャルストアへの追加 を参照してください。
管理コンソールを使用した認証情報ストアエイリアスの編集
- 管理コンソールにログインし、Runtime タブをクリックします。
-
サーバーを選択し、Security (Elytron)
Stores の順に選択し、View をクリックします。 - クレデンシャルストアを選択し、Aliases をクリックしてエイリアスを編集します。
3.1.3. 設定で保存された認証情報の使用
クレデンシャルストアに保存されているパスワードまたは機密文字列を参照するには、JBoss EAP 設定で credential-reference
属性を使用します。credential-reference
は、JBoss EAP 設定の全体でパスワードやその他の機密文字列を提供する代わりに使用できます。
credential-reference={store=STORE_NAME, alias=ALIAS}
credential-reference={store=STORE_NAME, alias=ALIAS}
たとえば、前のサンプル のクレデンシャルストアに追加されたパスワードを使用して新しいデータソースを作成する場合は、以下のように credential-reference
を使用できます。
data-source add --name=my_DS --jndi-name=java:/my_DS --driver-name=h2 --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE --user-name=db_user --credential-reference={store=my_store, alias=database-pw}
data-source add --name=my_DS --jndi-name=java:/my_DS --driver-name=h2 --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE --user-name=db_user --credential-reference={store=my_store, alias=database-pw}
上記の例では、--password
を使用してパスワードを指定する代わりに、ストア名とエイリアスを含む credential-reference
が指定されます。作成されたデータソース設定を確認すると、パスワードは定義されず、password
が定義されておらず、credential-reference
属性が定義されることに注意してください。
/subsystem=datasources/data-source=my_DS:read-resource() { "outcome" => "success", "result" => { ... "credential-reference" => { "store" => "my_store", "alias" => "database-pw" }, ... "password" => undefined, ... } }
/subsystem=datasources/data-source=my_DS:read-resource()
{
"outcome" => "success",
"result" => {
...
"credential-reference" => {
"store" => "my_store",
"alias" => "database-pw"
},
...
"password" => undefined,
...
}
}
3.1.4. クレデンシャルストアの認証情報のリスト
以下の管理 CLI コマンドを使用すると、クレデンシャルストアに含まれるすべての認証情報のエイリアスを一覧表示できます。
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
例を以下に示します。
/subsystem=elytron/credential-store=my_store:read-aliases() { "outcome" => "success", "result" => [ "database-pw" ] }
/subsystem=elytron/credential-store=my_store:read-aliases()
{
"outcome" => "success",
"result" => [
"database-pw"
]
}
3.1.5. クレデンシャルストアからの認証情報の削除
以下のコマンドを使用して、クレデンシャルストアから認証情報を削除できます。
/subsystem=elytron/credential-store=STORE_NAME:remove-alias(alias=ALIAS)
/subsystem=elytron/credential-store=STORE_NAME:remove-alias(alias=ALIAS)
例を以下に示します。
/subsystem=elytron/credential-store=my_store:remove-alias(alias=database-pw)
/subsystem=elytron/credential-store=my_store:remove-alias(alias=database-pw)
3.1.6. 外部ソースからクレデンシャルストアのマスターパスワードの取得
クレデンシャルストアのマスターパスワードをクリアで指定する代わりに、擬似クレデンシャルストアを使用してパスワードを指定することもできます。以下のオプションを使用できます。
- EXT
java.lang.Runtime#exec(java.lang.String)
を使用した外部コマンド。パラメーターが必要な場合、それらは文字列のスペースで区切られたリストを使用して指定されます。外部コマンドは、オペレーティングシステムからの実行可能ファイル (シェルスクリプトや実行可能バイナリーなど) を参照します。パスワードは、実行したコマンドの標準出力から読み込まれます。例
{EXT}/usr/bin/getTheMasterPasswordScript.sh par1 par2
{EXT}/usr/bin/getTheMasterPasswordScript.sh par1 par2
Copy to Clipboard Copied! - CMD
java.lang.ProcessBuilder
を使用した外部コマンドパラメーターが必要な場合、それらは文字列のコンマ区切られたリストを使用して指定されます。外部コマンドは、オペレーティングシステムからの実行可能ファイル (シェルスクリプトや実行可能バイナリーなど) を参照します。パスワードは、実行したコマンドの標準出力から読み込まれます。例
{CMD}/usr/bin/getTheMasterPasswordScript.sh par1,par2
{CMD}/usr/bin/getTheMasterPasswordScript.sh par1,par2
Copy to Clipboard Copied! - MASK
PBE または Password Based Encryption を使用してマスクされたパスワード。
SALT
およびITERATION
の値が含まれる以下の形式である必要があります。MASK-MASKED_VALUE;SALT;ITERATION
MASK-MASKED_VALUE;SALT;ITERATION
Copy to Clipboard Copied! 例
MASK-NqMznhSbL3lwRpDmyuqLBW==;12345678;123
MASK-NqMznhSbL3lwRpDmyuqLBW==;12345678;123
Copy to Clipboard Copied!
EXT
、CMD
、および MASK
は、外部パスワードを提供するレガシーセキュリティー vault スタイルと後方互換性を提供します。MASK
には、SALT
と ITERATION
の値が含まれる上記の形式を使用する必要があります。
また、別のクレデンシャルストアにあるパスワードを、新しいクレデンシャルストアのマスターパスワードとして使用することもできます。
別のクレデンシャルストアのパスワードで作成されたクレデンシャルストアの例
/subsystem=elytron/credential-store=exampleCS:add(location="cred_stores/exampleCS.jceks", relative-to=jboss.server.data.dir, create=true, credential-reference={store=master-cred-store, alias=master-pw})
/subsystem=elytron/credential-store=exampleCS:add(location="cred_stores/exampleCS.jceks", relative-to=jboss.server.data.dir, create=true, credential-reference={store=master-cred-store, alias=master-pw})
3.1.7. FIPS 140-2 対応クレデンシャルストアの定義
FIPS 140-2 準拠のクレデンシャルストアは、以下のいずれかの方法で定義できます。
3.1.7.1. NSS データベースを使用した FIPS 140-2 対応クレデンシャルストアの定義
FIPS に準拠するキーストアを取得するには、NSS データベースにアクセスする Sun PKCS#11 プロバイダーを使用します。データベースの定義方法には、NSS データベースの設定 を参照してください。
クレデンシャルストアで使用する秘密鍵を作成します。
注記keytool
コマンドが機能するには、nss_pkcsll_fips.cfg
ファイルでnssDbMode
属性をreadWrite
の値に割り当てる必要があります。keytool -keystore NONE -storetype PKCS11 -storepass STORE_PASSWORD -genseckey -alias ALIAS -keyalg AES -keysize 256
$ keytool -keystore NONE -storetype PKCS11 -storepass STORE_PASSWORD -genseckey -alias ALIAS -keyalg AES -keysize 256
Copy to Clipboard Copied! 外部クレデンシャルストアを作成します。外部クレデンシャルストアは PKCS#11 キーストアに秘密鍵を保持し、前の手順で定義したエイリアスを使用してこのキーストアにアクセスします。その後、このキーストアは JCEKS キーストアの認証情報を復号化するために使用されます。
credential-store
属性に加え、credential-store
KeyStoreCredentialStore
実装プロパティー は、外部クレデンシャルストアを設定するのに使用されます。/subsystem=elytron/credential-store=STORE_NAME:add(modifiable=true, implementation-properties={"keyStoreType"=>"PKCS11","external"=>"true","keyAlias"=>"ALIAS", externalPath="/path/to/JCEKS_file"},credential-reference={clear-text="STORE_PASSWORD"}, create=true)
/subsystem=elytron/credential-store=STORE_NAME:add(modifiable=true, implementation-properties={"keyStoreType"=>"PKCS11","external"=>"true","keyAlias"=>"ALIAS", externalPath="/path/to/JCEKS_file"},credential-reference={clear-text="STORE_PASSWORD"}, create=true)
Copy to Clipboard Copied! 作成後、クレデンシャルストアを使用して通常通りにエイリアスを保存することができます。
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
Copy to Clipboard Copied! クレデンシャルストアから読み取り、エイリアスが正常に追加されたことを確認します。
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
Copy to Clipboard Copied!
3.1.7.2. BouncyCastle
プロバイダーを使用した FIPS 140-2 対応クレデンシャルストアの定義
以下の手順では、BouncyCastle
プロバイダーを使用して FIPS 準拠のキーストアを取得する方法の概要を説明します。
-
お使いの環境が
BouncyCastle
プロバイダー を使用するように設定されていることを確認します。 クレデンシャルストアで使用する秘密鍵を作成します。
keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
$ keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
Copy to Clipboard Copied! 重要FIPS クレデンシャルストアを
elytron
サブシステムで定義するには、キーストアのkeypass
およびstorepass
が同じである必要があります。外部クレデンシャルストアを作成します。外部クレデンシャルストアは BCFKS キーストアの秘密鍵を保持し、前の手順で定義したエイリアスを使用してこのキーストアにアクセスします。その後、このキーストアは JCEKS キーストアの認証情報を復号化するために使用されます。
credential-store
KeyStoreCredentialStore
実装プロパティー は、外部クレデンシャルストアを設定するために使用されます。/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add(relative-to=jboss.server.config.dir,credential-reference={clear-text=PASSWORD},implementation-properties={keyAlias=KEY_ALIAS,external=true,externalPath=CREDENTIAL_STORE,keyStoreType=BCFKS},create=true,location=KEYSTORE,modifiable=true)
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add(relative-to=jboss.server.config.dir,credential-reference={clear-text=PASSWORD},implementation-properties={keyAlias=KEY_ALIAS,external=true,externalPath=CREDENTIAL_STORE,keyStoreType=BCFKS},create=true,location=KEYSTORE,modifiable=true)
Copy to Clipboard Copied! 作成後、クレデンシャルストアを使用して通常通りにエイリアスを保存することができます。
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
Copy to Clipboard Copied! クレデンシャルストアから読み取り、エイリアスが正常に追加されたことを確認します。
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:read-aliases()
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:read-aliases()
Copy to Clipboard Copied!
3.1.8. クレデンシャルストアのカスタム実装の使用
クレデンシャルストアのカスタム実装を使用するには、以下を実行します。
-
Service Provider Interface (SPI)
CredentialStoreSpi
抽象クラスを拡張するクラスを作成します。 -
Java Security
Provider
を実装するクラスを作成します。このプロバイダーはカスタムクレデンシャルストアクラスをサービスとして追加する必要があります。 クレデンシャルストアおよびプロバイダークラスが含まれるモジュールを作成し、
org.wildfly.security.elytron
における依存関係とともに JBoss EAP に追加します。以下に例を示します。module add --name=org.jboss.customcredstore --resources=/path/to/customcredstoreprovider.jar --dependencies=org.wildfly.security.elytron --slot=main
module add --name=org.jboss.customcredstore --resources=/path/to/customcredstoreprovider.jar --dependencies=org.wildfly.security.elytron --slot=main
Copy to Clipboard Copied! プロバイダーのプロバイダーローダーを作成します。以下に例を示します。
/subsystem=elytron/provider-loader=myCustomLoader:add(class-names=[org.wildfly.security.mycustomcredstore.CustomElytronProvider],module=org.jboss.customcredstore)
/subsystem=elytron/provider-loader=myCustomLoader:add(class-names=[org.wildfly.security.mycustomcredstore.CustomElytronProvider],module=org.jboss.customcredstore)
Copy to Clipboard Copied! カスタム実装を使用してクレデンシャルストアを作成します。
注記適切な
providers
およびtype
の値を指定するようにしてください。type
の値は、カスタムクレデンシャルストアクラスをサービスとして追加するプロバイダークラスで使用されるものです。以下に例を示します。
/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
Copy to Clipboard Copied! また、複数のプロバイダーを作成した場合は、
other-providers
で別のプロバイダーローダーを使用して追加のプロバイダーを指定することもできます。これにより、新しいタイプの認証情報の追加実装が可能になります。指定した他のプロバイダーは、カスタムクレデンシャルストアのinitialize
メソッドでProvider[]
引数として自動的にアクセスできます。例を以下に示します。/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,other-providers=myCustomLoader2,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,other-providers=myCustomLoader2,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
Copy to Clipboard Copied!
3.1.9. WildFly Elytron Tool を使用した認証情報ストアのオフライン作成および修正
WildFly Elytron ツールは EAP_HOME/bin/
にある elytron-tool
スクリプトを使用してアクセスします。このツールを使うことで、オフラインまたは停止された JBoss EAP サーバーのクレデンシャルストアを作成および変更できます。
JCEKS キーストアの実装は Java ベンダーごとに異なります。そのため、JBoss EAP インスタンスは JCEKS キーストアを生成した同じベンダーから JDK を実行する必要があります。
WildFly Elytron ツールを使用して、稼働中の JBoss EAP サーバーによって使用されているクレデンシャルストアを変更すると、ストアへの変更が失われる可能性があります。その代わりに、前述のセクションで説明されているように 管理 CLI を使用して、稼働中のサーバーのクレデンシャルストアを作成し、変更する必要があります。
以下のコマンドは、Red Hat Enterprise Linux および Solaris システムで elytron-tool.sh
を使用して示します。Windows Server システムの場合は、代わりに elytron-tool.bat
スクリプトを使用してください。
WildFly Elytron ツールを使用したクレデンシャルストアの作成
以下のコマンドで、WildFly Elytron ツールを使用してクレデンシャルストアを作成します。
EAP_HOME/bin/elytron-tool.sh credential-store --create --location "path/to/store_file" --password STORE_PASSWORD
$ EAP_HOME/bin/elytron-tool.sh credential-store --create --location "path/to/store_file" --password STORE_PASSWORD
例を以下に示します。
EAP_HOME/bin/elytron-tool.sh credential-store --create --location "../cred_stores/my_store.jceks" --password supersecretstorepassword
$ EAP_HOME/bin/elytron-tool.sh credential-store --create --location "../cred_stores/my_store.jceks" --password supersecretstorepassword
コマンドでストアパスワードを指定しない場合は、その引数を省略し、標準入力を使用して手動でパスワードを入力するように求められます。ストアパスワードのには、Wi8ldFly Elytron ツールで生成された、マスクされたパスワード を使用することもできます。
WildFly Elytron Tool による BouncyCastle
プロバイダーを使用した認証情報ストアの作成
以下の手順では、WildFly Elytron ツールを使用してクレデンシャルストアを作成する方法を説明します。
-
環境が
BouncyCastle
プロバイダーを使用するように設定されていることを確認します 。 BCFKS
キーストアを定義します。このキーストアがすでに存在する場合は、次のステップに進んでください。keytool -genkeypair -alias ALIAS -keyalg RSA -keysize 2048 -keypass PASSWORD -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD
$ keytool -genkeypair -alias ALIAS -keyalg RSA -keysize 2048 -keypass PASSWORD -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD
Copy to Clipboard Copied! 重要FIPS クレデンシャルストアを
elytron
サブシステムで定義するには、キーストアのkeypass
およびstorepass
が同じである必要があります。クレデンシャルストアの秘密鍵を生成します。
keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
$ keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
Copy to Clipboard Copied! 以下のコマンドで、WildFly Elytron ツールを使用してクレデンシャルストアを定義します。
EAP_HOME/bin/elytron-tool.sh credential-store -c -a ALIAS -x ALIAS_PASSWORD -p PASSWORD -l KEYSTORE -u "keyStoreType=BCFKS;external=true;keyAlias=KEY_ALIAS;externalPath=CREDENTIAL_STORE"
$ EAP_HOME/bin/elytron-tool.sh credential-store -c -a ALIAS -x ALIAS_PASSWORD -p PASSWORD -l KEYSTORE -u "keyStoreType=BCFKS;external=true;keyAlias=KEY_ALIAS;externalPath=CREDENTIAL_STORE"
Copy to Clipboard Copied!
WildFly Elytron Tool を使用したクレデンシャルストアへの認証情報の追加
以下のコマンドで、WildFly Elytron ツールを使用してクレデンシャルストアに認証情報を追加します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --add ALIAS --secret SENSITIVE_STRING
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --add ALIAS --secret SENSITIVE_STRING
例を以下に示します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --add database-pw --secret speci@l_db_pa$$_01
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --add database-pw --secret speci@l_db_pa$$_01
クレデンシャルストアのパスワードを提供するのと同様に、コマンドでシークレットを指定しない場合は、この引数を省略できます。その場合、標準入力を使用してシークレットを手動で入力するように求められます。
WildFly Elytron Tool を使用したクレデンシャルストアのすべての認証情報の一覧表示
以下のコマンドで、WildFly Elytron ツールを使用してクレデンシャルストアの認証情報を一覧表示します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --aliases
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --aliases
例を以下に示します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --aliases
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --aliases
Wildfly Elytron Tool を使用した、認証情報ストアにエイリアスが存在するかどうかの確認
以下のコマンドで、WildFly Elytron ツールを使用してクレデンシャルストアにエリアスが存在するかどうかを確認します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --exists ALIAS
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --exists ALIAS
例を以下に示します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --exists database-pw
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --exists database-pw
WildFly Elytron Tool を使用した認証情報ストアからの認証情報の削除
以下のコマンドで、WildFly Elytron ツールを使用してクレデンシャルストアから認証情報を削除します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --remove ALIAS
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --remove ALIAS
例を以下に示します。
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --remove database-pw
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --remove database-pw
WildFly Elytron Tool で作成されたクレデンシャルストアを JBoss EAP サーバーに追加
WildFly Elytron ツールを使用してクレデンシャルストアを作成したら、以下の管理 CLI コマンドを使用して、実行している JBoss EAP サーバーに追加します。
/subsystem=elytron/credential-store=STORE_NAME:add(location="path/to/store_file",credential-reference={clear-text=STORE_PASSWORD})
/subsystem=elytron/credential-store=STORE_NAME:add(location="path/to/store_file",credential-reference={clear-text=STORE_PASSWORD})
例を以下に示します。
/subsystem=elytron/credential-store=my_store:add(location="../cred_stores/my_store.jceks",credential-reference={clear-text=supersecretstorepassword})
/subsystem=elytron/credential-store=my_store:add(location="../cred_stores/my_store.jceks",credential-reference={clear-text=supersecretstorepassword})
クレデンシャルストアを JBoss EAP 設定に追加することで、credential-reference
属性 を使用してクレデンシャルストアに保存されているパスワードまたは機密文字列を参照できます。
詳細は、EAP_HOME/bin/elytron-tool.sh credential-store --help
コマンドを使用して、利用可能なオプションの詳細な一覧を表示してください。
3.1.9.1. WildFly Elytron Tool を使用した、マスクされた文字列の生成
WildFly Elytron ツールで、クレデンシャルストアのプレーンテキストパスワードの代わりに使用する PicketBox と互換性のある MASK-
で暗号化した文字列を生成できます。
マスクされた文字列を生成するには、以下のコマンドを使用して salt および iteration count の値を指定します。
EAP_HOME/bin/elytron-tool.sh mask --salt SALT --iteration ITERATION_COUNT --secret PASSWORD
$ EAP_HOME/bin/elytron-tool.sh mask --salt SALT --iteration ITERATION_COUNT --secret PASSWORD
以下に例を示します。
EAP_HOME/bin/elytron-tool.sh mask --salt 12345678 --iteration 123 --secret supersecretstorepassword
$ EAP_HOME/bin/elytron-tool.sh mask --salt 12345678 --iteration 123 --secret supersecretstorepassword
MASK-8VzWsSNwBaR676g8ujiIDdFKwSjOBHCHgnKf17nun3v;12345678;123
コマンドでシークレットを指定しない場合は、その引数を省略し、標準入力を使用して手動でシークレットを入力するように求められます。
詳細は、EAP_HOME/bin/elytron-tool.sh mask --help
コマンドを使用して、利用可能なオプションの詳細な一覧を表示してください。
3.1.9.2. WildFly Elytron Tool を使用した、パスワード vault のクレデンシャルストアへの変換
WildFly Elytron ツールを使用することで、パスワード vault をクレデンシャルストアに変換できます。パスワード vault をクレデンシャルストアに変換するには、vault の初期化時に vault の値を 使用する必要があります。
パスワード vault を変換する際に、新しいクレデンシャルストアのエイリアスは、同等のパスワード vault ブロックおよび属性名 (VAULT_BLOCK::ATTRIBUTE_NAME
) に基づいて、以下の形式で名前が付けられます。
シングルパスワード vault の変換
以下のコマンドで、単一のパスワード vault をクレデンシャルストアに変換します。
EAP_HOME/bin/elytron-tool.sh vault --keystore "path/to/vault_file" --keystore-password VAULT_PASSWORD --enc-dir "path/to/vault_directory" --salt SALT --iteration ITERATION_COUNT --alias VAULT_ALIAS
$ EAP_HOME/bin/elytron-tool.sh vault --keystore "path/to/vault_file" --keystore-password VAULT_PASSWORD --enc-dir "path/to/vault_directory" --salt SALT --iteration ITERATION_COUNT --alias VAULT_ALIAS
たとえば、--location
引数を使用して、新しいクレデンシャルストアのファイル名と場所を指定することもできます。
EAP_HOME/bin/elytron-tool.sh vault --keystore ../vaults/vault.keystore --keystore-password vault22 --enc-dir ../vaults/ --salt 1234abcd --iteration 120 --alias my_vault --location ../cred_stores/my_vault_converted.cred_store
$ EAP_HOME/bin/elytron-tool.sh vault --keystore ../vaults/vault.keystore --keystore-password vault22 --enc-dir ../vaults/ --salt 1234abcd --iteration 120 --alias my_vault --location ../cred_stores/my_vault_converted.cred_store
--summary
引数を使用して、変換に使用する管理 CLI コマンドの概要を出力することもできます。プレーンテキストのパスワードが使用される場合でも、これはサマリー出力でマスクされることに注意してください。このコマンドで指定しない限り、デフォルトの SALT
と ITERATION
の値が使用されます。
複数パスワード vault の一括変換
複数のパスワード vault を一括変換するには、以下を実行します。
以下の形式で、変換する vault の詳細を記述ファイルに配置します。
keystore:path/to/vault_file keystore-password:VAULT_PASSWORD enc-dir:path/to/vault_directory salt:SALT iteration:ITERATION_COUNT location:path/to/converted_cred_store alias:VAULT_ALIAS properties:PARAMETER1=VALUE1;PARAMETER2=VALUE2;
keystore:path/to/vault_file keystore-password:VAULT_PASSWORD enc-dir:path/to/vault_directory salt:SALT
1 iteration:ITERATION_COUNT location:path/to/converted_cred_store
2 alias:VAULT_ALIAS properties:PARAMETER1=VALUE1;PARAMETER2=VALUE2;
3 Copy to Clipboard Copied! 以下に例を示します。
keystore:/vaults/vault1/vault1.keystore keystore-password:vault11 enc-dir:/vaults/vault1/ salt:1234abcd iteration:120 location:/cred_stores/vault1_converted.cred_store alias:my_vault keystore:/vaults/vault2/vault2.keystore keystore-password:vault22 enc-dir:/vaults/vault2/ salt:abcd1234 iteration:130 location:/cred_stores/vault2_converted.cred_store alias:my_vault2
keystore:/vaults/vault1/vault1.keystore keystore-password:vault11 enc-dir:/vaults/vault1/ salt:1234abcd iteration:120 location:/cred_stores/vault1_converted.cred_store alias:my_vault keystore:/vaults/vault2/vault2.keystore keystore-password:vault22 enc-dir:/vaults/vault2/ salt:abcd1234 iteration:130 location:/cred_stores/vault2_converted.cred_store alias:my_vault2
Copy to Clipboard Copied! 直前の手順の説明ファイルを使用して、一括変換コマンドを実行します。
EAP_HOME/bin/elytron-tool.sh vault --bulk-convert vaultdescriptions.txt
$ EAP_HOME/bin/elytron-tool.sh vault --bulk-convert vaultdescriptions.txt
Copy to Clipboard Copied!
詳細は、EAP_HOME/bin/elytron-tool.sh vault --help
コマンドを使用して、利用可能なオプションの詳細な一覧を表示してください。
3.1.10. Elytron クライアントでのクレデンシャルストアの使用
EJB などの JBoss EAP に接続するクライアントは、Elytron クライアントを使用して認証できます。実行中の JBoss EAP サーバーにアクセスできないユーザーは、WildFly Elytron ツールを使用してクレデンシャルストアを作成および変更 できます。そのため、クライアントは Elytron クライアントを使用してクレデンシャルストア内の機密情報にアクセスできます。
以下の例は、Elytron クライアント設定ファイルでクレデンシャルストアを使用する方法を示しています。
クレデンシャルストアを含む custom-config.xml
の例
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> ... <credential-stores> <credential-store name="my_store"> <protection-parameter-credentials> <credential-store-reference clear-text="pass123"/> </protection-parameter-credentials> <attributes> <attribute name="location" value="/path/to/my_store.jceks"/> </attributes> </credential-store> </credential-stores> ... <authentication-configurations> <configuration name="my_user"> <set-host name="localhost"/> <set-user-name name="my_user"/> <set-mechanism-realm name="ManagementRealm"/> <use-provider-sasl-factory/> <credentials> <credential-store-reference store="my_store" alias="my_user"/> </credentials> </configuration> </authentication-configurations> ... </authentication-client> </configuration>
<configuration>
<authentication-client xmlns="urn:elytron:client:1.2">
...
<credential-stores>
<credential-store name="my_store">
<protection-parameter-credentials>
<credential-store-reference clear-text="pass123"/>
</protection-parameter-credentials>
<attributes>
<attribute name="location" value="/path/to/my_store.jceks"/>
</attributes>
</credential-store>
</credential-stores>
...
<authentication-configurations>
<configuration name="my_user">
<set-host name="localhost"/>
<set-user-name name="my_user"/>
<set-mechanism-realm name="ManagementRealm"/>
<use-provider-sasl-factory/>
<credentials>
<credential-store-reference store="my_store" alias="my_user"/>
</credentials>
</configuration>
</authentication-configurations>
...
</authentication-client>
</configuration>
Elytron Client を使用したクライアント認証の設定 詳細は、JBoss EAPHow to Configure Identity Management Guideを参照してください。