第4章 クレデンシャルをセキュアに保存する方法


JBoss EAP では、設定ファイル外で機密文字列を暗号化できます。これらの文字列はキーストアに格納でき、その後アプリケーションおよび検証システムに対して復号化されます。機密文字列は以下のいずれかに格納できます。

  • クレデンシャルストア: JBoss EAP 7.1 で導入されるクレデンシャルストアは、ストレージファイルで暗号化することで、機密およびプレーンテキストの文字列を安全に保護できます。各 JBoss EAP サーバーに複数のクレデンシャルストアを含めることができます。
  • パスワード vault: レガシー設定で使用されると、パスワード vault は Java キーストアを使用して、設定ファイル外に機密文字列を保存します。各 JBoss EAP サーバーには単一のパスワード vault のみを含めることができます。

EAP_HOME/standalone/configuration/EAP_HOME/domain/configuration/ の設定ファイルは、すべてデフォルトでは読み取り可能です。プレーンテキストパスワードを設定ファイルに保存せず、クレデンシャルストア または password vault のいずれかに認証情報を配置することを強く推奨します。

設定ファイルにプレーンテキストのパスワードを配置する場合、これらのファイルは、限られたユーザーのみがアクセスできるようにする必要があります。JBoss EAP 7 を実行しているユーザーアカウントには少なくとも読み書き込みアクセスが必要です。

4.1. Elytron のクレデンシャルストア

4.1.1. Elytron が提供するクレデンシャルストア

Elytron には、クレデンシャルの保存に使用できるデフォルトのクレデンシャルストアタイプが 2 つ ( KeyStoreCredentialStore と PropertiesCredentialStore) 用意されています。JBoss EAP 管理 CLI でクレデンシャルストアを管理することも、Wild Fly Elytron ツールを使用してオフラインで管理することもできます。2 つのデフォルトストアタイプに加えて、独自のカスタムクレデンシャルストアを作成、使用、管理することができます。

4.1.1.1. KeyStoreCredentialStore/credential-store

Elytron のすべてのクレデンシャルタイプを Key Store Credential Store に格納できます。elytron サブシステムの Key Store Credential Store のリソース名は credential-store です。Key Store Credential Store は、Java Development Kit (JDK) の Key Store 実装が提供するメカニズムを使用して、認証情報を保護します。

管理用 CLI で Key Store Credential Store に次のようにアクセスします。

/subsystem=elytron/credential-store

4.1.1.2. PropertiesCredentialStore/secret-key-credential-store

JBoss EAP を正しく起動するには、特定のセキュアリソースのロックを解除する初期キーが必要です。secret-key-credential-store を使用して、このマスターシークレットキーを指定し、これらの必要なサーバーリソースのロックを解除します。また、Properties Credential Store を使用して、AES(Advanced Encryption Standard) の秘密鍵の保存をサポートする SecretKeyCredential を保存することもできます。ファイルシステムのパーミッションを使用して、クレデンシャルストアへのアクセスを制限します。アプリケーションサーバーのみにアクセス権を付与して、このクレデンシャルストアへのアクセスを制限するのが理想的です。PropertiesCredentialStore の elytron サブシステムでのリソース名は secret-key-credential-store で、管理 CLI で以下のようにアクセスできます。

/subsystem=elytron/secret-key-credential-store

初期キーの作成および提供の詳細は、セキュリティーで保護されたリソースをロック解除するための JBoss EAP への初期キーの提供 を参照してください。また、外部のソースからマスターキーやパスワードを入手することもできます。外部ソースからパスワードを取得する方法は、外部ソースからクレデンシャルストアのパスワードの取得 を参照してください。

4.1.2. Elytron のクレデンシャルタイプ

Elytron では、さまざまなセキュリティーの用途に合わせて以下の 3 種類のクレデンシャルがあり、これらのクレデンシャルを Elytron のクレデンシャルストアの 1 つに保存できます。

PasswordCredential

このクレデンシャルタイプでは、プレーンテキスト (暗号化されていない) パスワードを安全に保存できます。パスワードを必要とする JBoss EAP リソースでは、パスワードの機密性を維持するために、プレーンテキストのパスワードの代わりに PasswordCredential への参照を使用します。

データベースへの接続の例

data-source add ... --user-name=db_user --password=StrongPassword

このデータベース接続コマンドの例では、StrongPassword とパスワードが表示されます。つまり、他の人もサーバー設定ファイルでパスワードを確認できるということです。

PasswordCredential を使用したデータベースへの接続例

data-source add ... --user-name=db_user --credential-reference={store=exampleKeyStoreCredentialStore, alias=passwordCredentialAlias}

データベースへの接続にパスワードではなくクレデンシャルリファレンスを使用した場合に、他の人が確認できるのは設定ファイル内のクレデンシャルリファレンスのみで、パスワードは表示されません。

KeyPairCredential

KeyPairCredential には、Secure Shell (SSH) と Public-Key Cryptography Standards (PKCS) の両方のキーペアを使用できます。キーペアには、共有される公開鍵と、特定のユーザーだけが知っている秘密鍵の両方が含まれています。

KeyPairCredential の管理は、Wild Fly Elytron ツールのみで行うことができます。

SecretKeyCredential
SecretKeyCredential は Elytron で暗号化式の作成に使用できる Advanced Encryption Standard (AES) キーです。暗号化式については、Elytron の暗号化式 を参照してください。

4.1.3. Elytron のクレデンシャルストアでサポートされる認証情報タイプ

次の表は、どのクレデンシャルストアがどの認証情報のタイプをサポートしているかを示しています。

認証情報のタイプKeyStoreCredentialStore/credential-storePropertiesCredentialStore/secret-key-credential-store

PasswordCredential

はい

いいえ

KeyPairCredential

はい

いいえ

SecretKeyCredential

はい

はい

4.1.4. JBoss EAP 管理 CLI を使用したクレデンシャルストアの操作

実行中の JBoss EAP サーバーで JBoss EAP クレデンシャルを管理するには、提供されている管理 CLI 操作を使用します。PasswordCredential および SecretKeyCredential は、JBoss EAP 管理 CLI を使用して管理できます。

注記

これらの操作は、変更可能なクレデンシャルストアに対してのみ行うことができます。デフォルトでは、クレデンシャルストアタイプはすべて変更可能です。

4.1.4.1. スタンドアロンサーバー用の KeyStoreCredentialStore/credential-Store の作成

ファイルシステムの任意のディレクトリーに、スタンドアロンサーバーとして動作する JBoss EAP 用の Key StoreCredentialStore を作成します。セキュリティーの理由から、このストアを含むディレクトリーは、一部のユーザーのみがアクセスできるようにする必要があります。

前提条件

  • 最低でも、JBoss EAP が実行されているユーザーアカウントの KeyStoreCredentialStore を含むディレクトリーへの読み取り/書き込みアクセスが割り当てられている。
注記

credential-storesecret-key-credential-store は同じ Elytron 機能 (org.wildfly.security.credential-store) を実装しているため、同じ名前を指定できません。

手順

  • 以下の管理用 CLI コマンドで KeyStoreCredentialStore を作成します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:add(path="<path_to_store_file>", relative-to=<base_path_to_store_file>, credential-reference={clear-text=<store_password>}, create=true)

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:add(path="exampleKeyStoreCredentialStore.jceks", relative-to=jboss.server.data.dir, credential-reference={clear-text=password}, create=true)
    {"outcome" => "success"}

4.1.4.2. マネージドドメインの KeyStoreCredential Store/credential-Store の作成

マネージドドメインに KeyStoreCredentialStore を作成できますが、最初に Wild Fly Elytron ツールを使用して、KeyStoreCredentialStore を準備する必要があります。1 つのマネージドドメインに複数のホストコントローラーがある場合は、以下のいずれかのオプションを選択します。

  • ホストコントローラーごとに KeyStoreCredentialStore を作成し、各 KeyStoreCredentialStore に認証情報を追加します。
  • あるホストコントローラーから他の全てのホストコントローラーに、生成された KeyStoreCredentialStore をコピーします。
  • KeyStoreCredentialStore ファイルをネットワークファイルシステム (NFS) に保存し、作成したすべての KeyStoreCredentialStore リソースにそのファイルを使用します。

また、Wild Fly Elytron ツールを使用せずに、ホストコントローラー上で認証情報を指定した KeyStoreCredentialStore ファイルを作成することもできます。

注記

同じプロファイルのすべてのサーバーには、KeyStore CredentialStore ファイルが含まれているので、全サーバーに KeyStoreCredentialStore リソースを定義する必要はありません。KeyStoreCredentialStore ファイルは、サーバーの data ディレクトリーの relative-to=jboss.server.data.dir にあります。

重要

credential-storesecret-key-credential-store は同じ Elytron 機能 (org.wildfly.security.credential-store) を実装しているため、同じ名前を指定できません。

以下の手順では、NFS を使用して KeyStoreCredentialStore ファイルをすべてのホストコントローラーに提供する方法を説明します。

手順

  1. Wild Fly Elytron ツールを使用して、KeyStoreCredentialStore ストレージファイルを作成します。この詳細は、Wild Fly Elytron ツールを使用したクレデンシャルストア操作 を参照してください。
  2. ストレージファイルを配布します。たとえば、scp コマンドを使用して各ホストコントローラーに割り当てたり、NFS に保存してすべての KeyStoreCredentialStore リソースに使用したりします。

    注記

    一貫性を保つために、複数のリソースやホストコントローラーが使用し、NFS に保存した KeyStoreCredentialStore ファイルは、読み取り専用モードで使用する必要があります。また、KeyStoreCredentialStore ファイルの絶対パスを指定することを確認してください。

    構文

    /profile=<profile_name>/subsystem=elytron/credential-store=<name_of_credential_store>:add(path=<absolute_path_to_store_keystore>,credential-reference={clear-text="<store_password>"},create=false,modifiable=false)

    /profile=full-ha/subsystem=elytron/credential-store=exampleCredentialStoreDomain:add(path=/usr/local/etc/example-cred-store.cs,credential-reference={clear-text="password"},create=false,modifiable=false)

  3. オプション:プロファイルに credential-store リソースを定義する必要がある場合は、ストレージファイルを使用してリソースを作成します。

    構文

    /profile=<profile_name>/subsystem=elytron/credential-store=<name_of_credential_store>:add(path=<path_to_store_file>,credential-reference={clear-text="<store_password>"})

    /profile=full-ha/subsystem=elytron/credential-store=exampleCredentialStoreHA:add(path=/usr/local/etc/example-cred-store-ha.cs, credential-reference={clear-text="password"})

  4. オプション: ホストコントローラーの KeyStoreCredentialStore リソースを作成します。

    構文

    /host=<host_controller_name>/subsystem=elytron/credential-store=<name_of_credential_store>:add(path=<path_to_store_file>,credential-reference={clear-text="<store_password>"})

    /host=master/subsystem=elytron/credential-store=exampleCredentialStoreHost:add(path=/usr/local/etc/example-cred-store-host.cs, credential-reference={clear-text="password"})

4.1.4.3. スタンドアロンサーバー用の Properties Credential Store/secret-key-credential-Store の作成

管理 CLI を使用して Properties Credential Store を作成します。Properties Credential Store を作成すると、JBoss EAP はデフォルトで秘密鍵を生成します。生成された鍵の名前は key で、そのサイズは 256 ビットです。

前提条件

  • 最低でも、JBoss EAP が実行されているユーザーアカウントの PropertiesCredentialStore を含むディレクトリーへの読み取り/書き込みのアクセスが割り当てられている。

手順

  • 次のコマンドを使用して、管理 CLI を使用して PropertiesCredentialStore を作成します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:add(path="<path_to_the_credential_store>", relative-to=<path_to_store_file>)

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:add(path=examplePropertiesCredentialStore.cs, relative-to=jboss.server.config.dir)
    {"outcome" => "success"}

4.1.4.4. KeyStoreCredentialStore/credential-store への PasswordCredential の追加

KeyStoreCredentialStore に PasswordCredential としてパスワードを必要とするリソースにはプレーンテキストのパスワードを追加して、そのパスワードを設定ファイルで非表示にします。この保存したクレデンシャルを参照して、パスワードを公開することなく、これらのリソースにアクセスできます。

前提条件

手順

  • 新しい PasswordCredential を KeyStoreCredentialStore に追加します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:add-alias(alias=<alias>, secret-value=<secret-value>)

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:add-alias(alias=passwordCredentialAlias, secret-value=StrongPassword)
    {"outcome" => "success"}

検証

  • 次のコマンドを実行して、PasswordCredential が KeyStoreCredentialStore に追加されたことを確認します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:read-aliases()

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => ["passwordcredentialalias"]
    }

4.1.4.5. KeyStoreCredentialStore/credential-Store での Secret Key Credential の生成

KeyStoreCredentialStore で Secret Key Credential を生成します。デフォルトでは、Elytron は 256 ビットの鍵を作成します。別のサイズにする場合は、key-size 属性に 128 ビットまたは 192 ビットの鍵を指定します。

前提条件

手順

  1. 以下の管理 CLI コマンドで、KeyStoreCredentialStore に SecretKeyCredential を生成します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:generate-secret-key(alias=<alias>, key-size=<128_or_192>)

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:generate-secret-key(alias=secretKeyCredentialAlias)

検証

  • 以下のコマンドを実行して、Elytron が SecretKeyCredential を KeyStoreCredentialStore に保存されたことを確認します。

    構文

    /subsystem=elytron/credential-store=<credential_store>:read-aliases()

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => [
            "secretkeycredentialalias"
        ]
    }

4.1.4.6. PropertiesCredentialStore/secret-key-credential-store での SecretKeyCredential の生成

PropertiesCredentialStore で SecretKeyCredential を生成します。デフォルトでは、Elytron は 256 ビットの鍵を作成します。別のサイズにする場合は、key-size 属性に 128 ビットまたは 192 ビットの鍵を指定します。

SecretKeyCredential を生成すると、Elytron は新しいランダムな秘密鍵を生成して SecretKeyCredential として保存します。PropertiesCredentialStore のエクスポート操作を使用して、クレデンシャルの内容を見ることができます。

重要

JBoss EAP は失われた Elytron クレデンシャルを復号化または取得できないため、PropertiesCredentialStore、SecretKeyCredential、またはその両方のバックアップを必ず作成してください。

PropertiesCredentialStore の export 操作を使用して、SecretKeyCredential の値を取得できます。この値をバックアップとして保存できます。詳細は、PropertiesCredential Store/secret-key-credential-store からの SecretKeyCredential のエクスポート を参照してください。

前提条件

手順

  • 以下の管理 CLI コマンドで PropertiesCredentialStore に SecretKeyCredential を生成します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_the_properties_credential_store>:generate-secret-key(alias=<alias>, key-size=<128_or_192>)

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:generate-secret-key(alias=secretKeyCredentialAlias)
    {"outcome" => "success"}

検証

  • 以下のコマンドを実行して、Elytron が SecretKeyCredential を作成したことを確認します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_the_properties_credential_store>:read-aliases()

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => [
            "secretkeycredentialalias",
            "key"
        ]
    }

4.1.4.7. PropertiesCredentialStore/secret-key-credential-store への SecretKeyCredential のインポート

PropertiesCredentialStore の外部で作成された SecretKeyCredential を Elytron の PropertiesCredentialStore にインポートできます。別のクレデンシャルストア (例: KeyStoreCredentialStore) から SecretKeyCredential をエクスポートしたとすると、それを PropertiesCredential Store にインポートできます。

前提条件

手順

  1. 以下のコマンドを使用すると、管理 CLI でコマンドのキャッシュを無効にできます。

    重要

    キャッシングを無効にしない場合は、管理 CLI の履歴ファイルにアクセスできるユーザーは誰でも、秘密鍵を確認できます。

    history --disable
  2. 次の管理 CLI コマンドを使用して、秘密鍵をインポートします。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:import-secret-key(alias=<alias>, key="<secret_key>")

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:import-secret-key(alias=imported, key="RUxZAUs+Y1CzEPw0g2AHHOZ+oTKhT9osSabWQtoxR+O+42o11g==")

  3. 以下の管理 CLI コマンドを使用して、コマンドのキャッシングを再度有効にしてください。

    history --enable

4.1.4.8. KeyStoreCredentialStore/credential-store にあるクレデンシャルのリスト表示

KeyStoreCredentialStore に保存されているすべての認証情報を表示するには、管理 CLI を使用してリストアップできます。

手順

  • 以下の管理用 CLI コマンドを使用して、KeyStoreCredentialStore に格納されている認証情報をリスト表示します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:read-aliases()

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => [
            "passwordcredentialalias",
            "secretkeycredentialalias"
        ]
    }

4.1.4.9. PropertiesCredential Store/secret-key-credential-store にあるクレデンシャルのリスト表示

PropertiesCredentialStore に格納されているすべてのクレデンシャルを表示するには、管理 CLI を使用してリストアップできます。

手順

  • 以下の管理 CLI コマンドを使用して、PropertiesCredentialStore に格納されている認証情報をリスト表示します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:read-aliases()

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => [
            "secretkeycredentialalias",
            "key"
        ]
    }

4.1.4.10. KeyStoreCredentialStore/credential-store からの SecretKeyCredential のエクスポート

KeyStoreCredentialStore から既存の SecretKeyCredential をエクスポートして、SecretKeyCredential を使用したり、SecretKeyCredential のバックアップを作成したりできます。

前提条件

手順

  • 以下の管理 CLI コマンドで、KeyStoreCredentialStore から SecretKeyCredential をエクスポートします。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:export-secret-key(alias=<alias>)

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:export-secret-key(alias=secretKeyCredentialAlias)
    {
        "outcome" => "success",
        "result" => {"key" => "RUxZAUui+8JkoDCE6mFyA3cCIbSAZaXq5wgYejj1scYgdDqWiw=="}
    }

4.1.4.11. PropertiesCredentialStore/secret-key-credential-store からの SecretKeyCredential のエクスポート

PropertiesCredentialStore から既存の SecretKeyCredential をエクスポートして、SecretKeyCredential を使用したり、SecretKeyCredential のバックアップを作成したりできます。

前提条件

手順

  • 以下の管理 CLI コマンドを使用して、PropertiesCredentialStore から SecretKeyCredential をエクスポートします。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:export-secret-key(alias=<alias>)

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:export-secret-key(alias=secretkeycredentialalias)
    {
        "outcome" => "success",
        "result" => {"key" => "RUxZAUtxXcYvz0aukZu+odOynIr0ByLhC72iwzlJsi+ZPmONgA=="}
    }

4.1.4.12. KeyStoreCredentialStore/credential-store からのクレデンシャルの削除

KeyStoreCredentialStore にすべてのクレデンシャルタイプを保存できますが、デフォルトでは、クレデンシャルを削除すると、Elytron は PasswordCredential であると想定します。別のクレデンシャルタイプを削除する場合は、entry-type 属性で指定します。

手順

  • 次の管理 CLI コマンドを使用して、KeyStoreCredentialStore からクレデンシャルを削除します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:remove-alias(alias=<alias>, entry-type=<credential_type>)

    PasswordCredential の削除例

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:remove-alias(alias=passwordCredentialAlias)
    {
        "outcome" => "success",
        "response-headers" => {"warnings" => [{
            "warning" => "Update dependent resources as alias 'passwordCredentialAlias' does not exist anymore",
            "level" => "WARNING",
            "operation" => {
                "address" => [
                    ("subsystem" => "elytron"),
                    ("credential-store" => "exampleKeyStoreCredentialStore")
                ],
                "operation" => "remove-alias"
            }
        }]}
    }

    SecretKeyCredential の削除例

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:remove-alias(alias=secretKeyCredentialAlias, entry-type=SecretKeyCredential)
    {
        "outcome" => "success",
        "response-headers" => {"warnings" => [{
            "warning" => "Update dependent resources as alias 'secretKeyCredentialAl
    ias' does not exist anymore",
            "level" => "WARNING",
            "operation" => {
                "address" => [
                    ("subsystem" => "elytron"),
                    ("credential-store" => "exampleKeyStoreCredentialStore")
                ],
                "operation" => "remove-alias"
            }
        }]}
    }

検証

  • 次のコマンドを実行して、Elytron がクレデンシャルを削除したことを確認します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:read-aliases()

    /subsystem=elytron/credential-store=exampleKeyStoreCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => []
    }

    削除したクレデンシャルはリストにありません。

4.1.4.13. PropertiesCredentialStore/secret-key-credential-store からのクレデンシャルの削除

PropertiesCredentialStore には、SecretKeyCredential タイプのみを格納できます。つまり、PropertiesCredentialStore からクレデンシャルを削除する時に、entry-type を指定する必要はありません。

手順

  • 以下のコマンドで PropertiesCredentialStore から SecretKeyCredential を削除します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:remove-alias(alias=<alias>)

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:remove-alias(alias=secretKeyCredentialAlias)
    {
        "outcome" => "success",
        "response-headers" => {"warnings" => [{
            "warning" => "Update dependent resources as alias 'secretKeyCredentialAlias' does not exist anymore",
            "level" => "WARNING",
            "operation" => {
                "address" => [
                    ("subsystem" => "elytron"),
                    ("secret-key-credential-store" => "examplePropertiesCredentialSt
    ore")
                ],
                "operation" => "remove-alias"
            }
        }]}
    }

検証

  • 次のコマンドを実行して、Elytron がクレデンシャルを削除したことを確認します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:read-aliases()

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => []
    }

    削除したクレデンシャルはリストにありません。

4.1.5. Wild Fly Elytron ツールを使用したクレデンシャルストア操作

4.1.5.1. Wild Fly Elytron ツールによる KeyStoreCredentialStore/credential-Store の作成

Elytron では、すべてのクレデンシャルタイプを保存できる KeyStoreCredentialStore をオフラインで作成できます。

手順

  • Wild Fly Elytron ツールを使用して、以下のコマンドで KeyStoreCredentialStore を作成します。

    構文

    $ 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/example-credential-store.jceks" --password storePassword
    Credential Store has been successfully created

    ストアのパスワードをコマンドに含めない場合は、この引数を省略して、プロンプトでパスワードを手動で入力してください。また、Wild Fly Elytron ツールで生成したマスキングされたパスワードを使用することもできます。マスクされたパスワードの生成については、Wild Fly Elytron ツールを使ったマスクされた暗号化文字列の生成 を参照してください。

4.1.5.2. Bouncy Castle プロバイダーを使用した KeyStoreCredential Store/credential-Store の作成

Bouncy Castle プロバイダーを使用して、KeyStoreCredentialStore を作成します。

前提条件

注記

credential-storesecret-key-credential-store は同じ Elytron 機能 (org.wildfly.security.credential-store) を実装しているため、同じ名前を指定できません。

手順

  1. BCFKS (Bouncy Castle FIPS Keystore) のキーストアを定義します。FIPS とは Federal Information Processing Standards の略です。このキーストアがすでにある場合は、次のステップに進んでください。

    $ keytool -genkeypair -alias <key_pair_alias> -keyalg <key_algorithm> -keysize <key_size> -storepass <key_pair_and_keystore_password> -keystore <path_to_keystore> -storetype BCFKS -keypass <key_pair_and_keystore_password>
    重要

    キーストアの keypass 属性と storepass 属性が同一であることを確認してください。そうでない場合は、elytron サブシステムの BCFKS キーストアでは定義できません。

  2. KeyStoreCredentialStore の秘密鍵を生成します。

    $ keytool -genseckey -alias <key_alias> -keyalg <key_algorithm> -keysize <key_size> -keystore <path_to_keystore> -storetype BCFKS -storepass <key_and_keystore_password> -keypass <key_and_keystore_password>
  3. KeyStoreCredentialStore を Wild Fly Elytron ツールを使用して以下のコマンドで定義します。

    $ EAP_HOME/bin/elytron-tool.sh credential-store -c -a <alias> -x <alias_password> -p <key_and_keystore_password> -l <path_to_keystore> -u "keyStoreType=BCFKS;external=true;keyAlias=<key_alias>;externalPath=<path_to_credential_store>"

4.1.5.3. Wild Fly Elytron ツールによる PropertiesCredentialStore/secret-key-credential-Store の作成

Elytron では、PropertiesCredentialStore をオフラインで作成し、SecretKeyCredential インスタンスを保存できます。

手順

  • 以下のコマンドで Wild Fly Elytron ツールを使用して PropertiesCredentialStore を作成します。

    構文

    $ EAP_HOME/bin/elytron-tool.sh credential-store --create --location "<path_to_store_file>" --type PropertiesCredentialStore

    $ bin/elytron-tool.sh credential-store --create --location=standalone/configuration/properties-credential-store.cs --type PropertiesCredentialStore
    Credential Store has been successfully created

4.1.5.4. Wild Fly Elytron ツール KeyStoreCredentialStore/credential-store の操作

Wild Fly Elytron ツールを使用して、以下のようなさまざまな KeyStoreCredentialStore タスクを行うことができます。

PasswordCredential の追加

PasswordCredential を KeyStoreCredentialStore に追加するには、以下の Wild Fly 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 "../cred_stores/example-credential-store.jceks" --password storePassword --add examplePasswordCredential --secret speci@l_db_pa$$_01
Alias "examplePasswordCredential" has been successfully stored

コマンドにシークレットを指定しない場合は、この引数を省略して、プロンプトが表示されたら手動でシークレットを入力します。

SecretKeyCredential の生成

KeyStoreCredential Store に SecretKeyCredential を追加するには、以下の Wild Fly Elytron ツールのコマンドを使用します。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --generate-secret-key=example --location=<path_to_the_credential_store> --password <store_password>

$ EAP_HOME/bin/elytron-tool.sh credential-store --generate-secret-key=example --location "../cred_stores/example-credential-store.jceks" --password storePassword
Alias "example" has been successfully stored

コマンドにシークレットを指定しない場合は、この引数を省略して、プロンプトが表示されたら手動でシークレットを入力します。

デフォルトでは、JBoss EAP で SecretKeyCredential を作成すると、256 ビットの秘密鍵が作成されます。サイズを変更する場合は、 --size=128 または --size=192 を指定すると、それぞれ 128 ビット、192 ビットの鍵を作成できます。

SecretKeyCredential のインポート

Secret Key Credential のインポートは、以下の Wild FLy Elytron ツールのコマンドで行うことができます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --import-secret-key=imported --location=<path_to_credential_store> --password=<store_password>

$ EAP_HOME/bin/elytron-tool.sh credential-store --import-secret-key=imported --location=../cred_stores/example-credential-store.jceks --password=storePassword

インポートする秘密鍵を入力します。

すべてのクレデンシャルのリスト表示

以下の Wild Fly Elytron ツールのコマンドを使用して、KeyStoreCredentialStore 内の認証情報をリスト表示できます。

構文

$ 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/example-credential-store.jceks" --password storePassword --aliases
Credential store contains following aliases: examplepasswordcredential example

エイリアスが存在するかどうかの確認

クレデンシャルストアにエイリアスが存在するかどうかを確認するには、次のコマンドを使用します。

構文

$ 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/example-credential-store.jceks" --password storePassword --exists examplepasswordcredential
Alias "examplepasswordcredential" exists

SecretKeyCredential のエクスポート

以下のコマンドで、KeyStoreCredentialStore から SecretKeyCredential をエクスポートできます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --export-secret-key=<alias> --location=<path_to_credential_store> --password=storePassword

$ EAP_HOME/bin/elytron-tool.sh credential-store --export-secret-key=example --location=../cred_stores/example-credential-store.jceks --password=storePassword
Exported SecretKey for alias example=RUxZAUtBiAnoLP1CA+i6DtcbkZHfybBJxPeS9mlVOmEYwjjmEA==

クレデンシャルの削除

以下のコマンドを使用して、クレデンシャルストアから認証情報を削除できます。

構文

$ 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/example-credential-store.jceks" --password storePassword --remove examplepasswordcredential
Alias "examplepasswordcredential" has been successfully removed

4.1.5.5. Wild Fly Elytron ツールの PropertiesCredentialStore/secret-key-credential-store の操作

以下のように、Wild Fly Elytron ツールを使用して、SecretKeyCredential に対する PropertiesCredentialStore 操作を実行します。

SecretKeyCredential の生成

以下の Wild Fly Elytron ツールのコマンドで PropertiesCredentialStore に SecteKeyCredential を生成できます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --generate-secret-key=example --location "<path_to_the_credential_store>" --type PropertiesCredentialStore

$ EAP_HOME/bin/elytron-tool.sh credential-store --generate-secret-key=example --location "standalone/configuration/properties-credential-store.cs" --type PropertiesCredentialStore
Alias "example" has been successfully stored

SecretKeyCredential のインポート

Secret Key Credential のインポートは、以下の Wild FLy Elytron ツールのコマンドで行うことができます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --import-secret-key=imported --location=<path_to_credential_store> --type PropertiesCredentialStore

$ EAP_HOME/bin/elytron-tool.sh credential-store --import-secret-key=imported --location "standalone/configuration/properties-credential-store.cs" --type PropertiesCredentialStore

すべてのクレデンシャルのリスト表示

以下の Wild Fly Elytron ツールのコマンドを使用して、PropertiesCredentialStore 内の認証情報をリスト表示できます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --location "<path_to_store_file>"  --aliases --type PropertiesCredentialStore

$ EAP_HOME/bin/elytron-tool.sh credential-store  --location "standalone/configuration/properties-credential-store.cs" --aliases --type PropertiesCredentialStore
Credential store contains following aliases: example

SecretKeyCredential のエクスポート

以下のコマンドで PropertiesCredentialStore から SecretKeyCredential をエクスポートできます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --export-secret-key=<alias> --location "<path_to_credential_store>"  --type PropertiesCredentialStore

$ EAP_HOME/bin/elytron-tool.sh credential-store --export-secret-key=example --location "standalone/configuration/properties-credential-store.cs" --type PropertiesCredentialStore
Exported SecretKey for alias example=RUxZAUt1EZM7PsYRgMGypkGirSel+5Eix4aSgwop6jfxGYUQaQ==

クレデンシャルの削除

以下のコマンドを使用して、クレデンシャルストアから認証情報を削除できます。

構文

$ EAP_HOME/bin/elytron-tool.sh credential-store --location "<path_to_store_file>" --remove <alias> --type PropertiesCredentialStore

$ EAP_HOME/bin/elytron-tool.sh credential-store --location "standalone/configuration/properties-credential-store.cs"  --remove example --type PropertiesCredentialStore
Alias "example" has been successfully removed

4.1.5.6. WildFly Elytron Tool で作成されたクレデンシャルストアの JBoss EAP サーバーへの追加

Wild Fly Elytron ツールでクレデンシャルストアを作成したら、実行中の JBoss EAP サーバーに追加できます。

前提条件

手順

  • 以下の管理 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=my_store:add(location="../cred_stores/example-credential-store.jceks",credential-reference={clear-text=storePassword})

クレデンシャルストアを JBoss EAP 設定に追加することで、credential-reference 属性 を使用してクレデンシャルストアに保存されているパスワードまたは機密文字列を参照できます。

詳細は、EAP_HOME/bin/elytron-tool.sh credential-store --help コマンドを使用して、利用可能なオプションの詳細な一覧を表示してください。

4.1.5.7. Wild Fly Elytron ツールによるキーペア管理の操作

以下の引数を使用して、クレデンシャルストアのエイリアスに保存するキーペアを新規生成するなど、elytron-tool.sh を実行してクレデンシャルストアを操作できます。

キーペアの生成

generate-key-pair コマンドでキーペアを作成します。その後、キーペアをクレデンシャルストアのエイリアスのに保存できます。以下の例では、割り当てられたサイズが3072ビットのRSAキーペアを作成し、クレデンシャルストアに指定された場所に保存しています。キーペアに割り当てられたエイリアスは example です。

$ EAP_HOME/bin/elytron-tool.sh credential-store --location=<path_to_store_file> --generate-key-pair example --algorithm RSA --size 3072
キーペアのインポート

既存の SSH キーペアを、指定したエイリアスでクレデンシャルストアにインポートするには、import-key-pair コマンドを使用します。以下の例では、Open SSH 形式の秘密鍵を含む/home/user/.ssh/id_rsa ファイルからexampleというエイリアスのキーペアをインポートしています。

$ EAP_HOME/bin/elytron-tool.sh credential-store --import-key-pair example --private-key-location /home/user/.ssh/id_rsa --location=<path_to_store_file>
キーペアのエクスポート

キーペアの公開鍵を表示するには、export-key-pair-public-key コマンドを使用します。公開鍵には、OpenSSH 形式のエイリアスが指定されています。以下の例では、エイリアスexampleの公開鍵を表示しています。

$ EAP_HOME/bin/elytron-tool.sh credential-store --location=<path_to_store_file> --export-key-pair-public-key example

Credential store password:
Confirm credential store password:
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMfncZuHmR7uglb0M96ieArRFtp42xPn9+ugukbY8dyjOXoi
cZrYRyy9+X68fylEWBMzyg+nhjWkxJlJ2M2LAGY=
注記

export-key-pair-public-key コマンドを実行すると、クレデンシャルストアのパスフレーズの入力が求められます。パスフレーズが存在しない場合は、プロンプトを空白にします。

4.1.5.8. Elytron の設定ファイルに保存されたキーペアの使用例

キーペアは対応する 2 つの個別の暗号化キー (公開鍵と秘密鍵) で構成されます。キーペアをクレデンシャルストアに保存してから、elytron の設定ファイルでキーペアを参照する必要があります。これにより、スタンドアロンサーバーの設定データ管理用のアクセス権を Git に割り当てることができます。

以下の例では、elytron の設定ファイルの &lt;credential-stores&gt; 要素でクレデンシャルストアとそのプロパティーを参照しています。&lt;credential&gt; 要素は、クレデンシャルストアとキーペアを格納するエイリアスを参照します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <authentication-client xmlns="urn:elytron:client:1.6">

     <credential-stores>
        <credential-store name="${credential_store_name}">
           <protection-parameter-credentials>
              <clear-password password="${credential_store_password}"/>
           </protection-parameter-credentials>
           <attributes>
              <attribute name="path" value="${path_to_credential_store}"/>
           </attributes>
        </credential-store>
     </credential-stores>

     <authentication-rules>
        <rule use-configuration="${configuration_file_name}"/>
     </authentication-rules>

     <authentication-configurations>
        <configuration name="${configuration_file_name}">
           <credentials>
              <credential-store-reference store="${credential_store_name}" alias="${alias_of_key_pair}"/>
           </credentials>
        </configuration>
     </authentication-configurations>

  </authentication-client>
</configuration>

elytron 設定ファイルの設定後に、そのキーペアを SSH 認証に使用できます。

4.1.5.9. 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 12345678 --iteration 123 --secret supersecretstorepassword
    
    MASK-8VzWsSNwBaR676g8ujiIDdFKwSjOBHCHgnKf17nun3v;12345678;123

    コマンドでシークレットを指定しない場合は、その引数を省略し、標準入力を使用して手動でシークレットを入力するように求められます。

詳細は、EAP_HOME/bin/elytron-tool.sh mask --help コマンドを使用して、利用可能なオプションの詳細な一覧を表示してください。

4.1.6. Elytron の暗号化式

機密な文字列を秘匿するには、サーバー設定ファイルで機密な字列を指定する代わりに、暗号化表現を使用できます。

暗号化式とは、文字列を SecretKeyCredential で暗号化し、その文字列をエンコーディングの接頭辞とリゾルバー名と組み合わせたものです。エンコーディング接頭辞は、Elytron に式が暗号化されていることを伝えます。リゾルバーは、暗号化式をクレデンシャルストア内で対応する SecretKeyCredential にマッピングします。

Elytron の expression=encryption リソースは、暗号化式を使用して、実行時にその中の暗号化された文字列を復号します。設定ファイルの中で、機密な文字列そのものではなく、暗号化式を使用して文字列の機密性を守ることができます。暗号化式は、以下のような形式になります。

特定のリゾルバーを使用する場合の構文

${ENC::RESOLVER_NAME:ENCRYPTED_STRING}

ENC は、暗号化式を表す接頭語です。

RESOLVER_NAME は、Elytron が暗号化された文字列の復号時に使用するリゾルバーです。

${ENC::initialresolver:RUxZAUMQE+L5zx9LmCRLyh5fjdfl1WM7lhfthKjeoEU+x+RMi6s=}

デフォルトのリゾルバーで暗号化式を作成すると、以下のようになります。

デフォルトのリゾルバーを使用する場合の構文

${ENC::ENCRYPTED_STRING}

${ENC::RUxZAUMQE+L5zx9LmCRLyh5fjdfl1WM7lhfthKjeoEU+x+RMi6s=}

この場合、Elytron は expression=encryption リソースで定義したデフォルトのリゾルバーを使用して式を復号化します。暗号化式は、対応の全リソース属性で使用できます。ある属性が暗号化式をサポートしているかどうかを調べるには、read-resource-description 操作などを使用します。

例: mail/mail-session の read-resource-description

/subsystem=mail/mail-session=*/:read-resource-description(recursive=true,access-control=none)
{
  "outcome"=>"success",
  "result"=>[{
  ...
    "from"=>{
      ...
      "expression-allowed"=>true,
      ...
   }]
}

この例では、from 属性が暗号化式をサポートしています。つまり、暗号化して、暗号化式を使用し、from フィールドのメールアドレスを非表示にできます。

4.1.7. Elytron での暗号化式の作成

機密な文字列と SecretKeyCredential から、暗号化式を作成します。この暗号化式を、管理モデルであるサーバー設定ファイルの機密文字列の代わりに使用すして、機密文字列を秘匿できます。

前提条件

手順

  1. 次の管理 CLI コマンドを使用して、クレデンシャルストア内の既存の SecretKeyCredential のエイリアスを参照するリゾルバーを作成します。

    構文

    /subsystem=elytron/expression=encryption:add(resolvers=[{name=<name_of_the_resolver>, credential-store=<name_of_credential_store>, secret-key=<secret_key_alias>}])

    /subsystem=elytron/expression=encryption:add(resolvers=[{name=exampleResolver, credential-store=examplePropertiesCredentialStore, secret-key=key}])

    リソースの重複に関するエラーメッセージが表示された場合は、以下のように、add ではなく list-add 操作を行ってください。

    構文

    /subsystem=elytron/expression=encryption:list-add(name=resolvers, value={name=<name_of_the_resolver>, credential-store=<name_of_credential_store>, secret-key=<secret_key_alias>})

    /subsystem=elytron/expression=encryption:list-add(name=resolvers,value={name=exampleResolver, credential-store=examplePropertiesCredentialStore, secret-key=key})
    {
        "outcome" => "success",
        "response-headers" => {
            "operation-requires-reload" => true,
            "process-state" => "reload-required"
        }
    }

  2. 以下の管理 CLI コマンドでサーバーをリロードします。

    reload
  3. 管理 CLI でのコマンドのキャッシングを無効にします。

    重要

    キャッシングを無効にしない場合は、管理 CLI の履歴ファイルにアクセスできるユーザーは誰でも、秘密鍵を確認できます。

    history --disable
  4. 以下の管理 CLI コマンドを使用して、暗号化式を作成します。

    構文

    /subsystem=elytron/expression=encryption:create-expression(resolver=<existing_resolver>, clear-text=<sensitive_string_to_protect>)

    /subsystem=elytron/expression=encryption:create-expression(resolver=exampleResolver, clear-text=TestPassword)
    {
        "outcome" => "success",
        "result" => {"expression" => "${ENC::exampleResolver:RUxZAUMQgtpG7oFlHR2j1Gkn3GKIHff+HR8GcMX1QXHvx2uGurI=}"}
    }

    ${ENC::example Resolver:RUx ZAUMQgtp G7o Fl HR2j1Gkn3GKIHff+HR8Gc MX1QXHvx2u Gur I=} は、管理モデルで Test Password の代わりに使用する暗号化式です。

    同じプレーンテキストをさまざまな場所で使用する場合は、対処の場所でプレーンテキストの代わりに、毎回このコマンドを繰り返してから暗号化式を使用します。同じプレーンテキストに対して同じコマンドを繰り返すと、同じキーでも異なる結果が得られます。これは、Elytron が呼び出しごとに固有の初期化ベクトルを使用しているためです。

    異なる暗号化式を使用して、文字列の暗号化式 1 つが侵害された場合に、他の暗号化式にも同じ文字列が含まれていることをユーザーが発見できないようにします。

  5. 以下の管理 CLI コマンドを使用して、コマンドキャッシングを再度有効にします。

    history --enable

4.1.8. JBoss EAP 設定での Password Credential の使用

クレデンシャルストアに保存されているパスワードまたは機密文字列を参照するには、JBoss EAP 設定で credential-reference 属性を使用します。credential-reference は、JBoss EAP 設定の全体でパスワードやその他の機密文字列を提供する代わりに使用できます。

前提条件

手順

  • credential-reference 属性で、既存の KeyStoreCredentialStore と PasswordCredential のエイリアスを参照します。

    構文

    credential-reference={store=<store_name>, alias=<alias>}

    data-source add --name=example_data_source --jndi-name=java:/example_data_source --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=exampleKeyStoreCredentialStore, alias=passwordCredentialAlias}
    16:17:23,024 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) WFLYJCA0001: Bound data source [java:/example_data_source]

    この例では、KeyStoreCredentialStore の exampleKeyStoreCredentialStore にある passwordCredentialAlias エイリアスが指定された既存の PasswordCredential を、データベースのプレーンテキストパスワードの代わりに使用し、データベースのパスワードを保護しています。

4.1.9. 暗号化式を使用した KeyStoreCredentialStore/credential-store の保護

Key Store Credential Store を保護するために、暗号化式を使用できます。

前提条件

手順

  • 暗号化式を clear-text として使用する KeyStoreCredentialStore を作成します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:add(path=<path_to_the_credential_store>, create=true, modifiable=true, credential-reference={clear-text=<encrypted_expression>})

    /subsystem=elytron/credential-store=secureKeyStoreCredentialStore:add(path="secureKeyStoreCredentialStore.jceks", relative-to=jboss.server.data.dir, create=true, modifiable=true, credential-reference={clear-text=${ENC::exampleResolver:RUxZAUMQgtpG7oFlHR2j1Gkn3GKIHff+HR8GcMX1QXHvx2uGurI=}})
    {"outcome" => "success"}

4.1.10. クレデンシャルストアのクレデンシャルの自動更新

クレデンシャルストアがある場合には、クレデンシャル参照から取得する前に、クレデンシャルを追加したり、既存のクレデンシャルを更新したりする必要はありません。Elytron はこのプロセスを自動化します。クレデンシャル参照の設定時には、store 属性と clear-text 属性の両方を指定します。Elytron は、store 属性で指定されたクレデンシャルストアにクレデンシャルを自動的に追加または更新します。オプションで、エイリアス 属性を指定すできます。

Elytron はクレデンシャルストアを以下のように更新する。

  • エイリアスを指定した場合:

    • エイリアスのエントリーが存在する場合に、既存のクレデンシャルは指定のクリアテキストのパスワードに置き換えられます。
    • エイリアスのエントリーが存在しない場合は、指定のエイリアスとクリアテキストのパスワードを含む新しいエントリーがクレデンシャルストアに追加されます。
  • エイリアスが指定されない場合、Elytron はエイリアスを生成して生成されたエイリアスと指定されたクリアテキストパスワードが指定されたエントリーを新たに、クレデンシャルストアに追加します。

クレデンシャルストアが更新されると、clear-text 属性は管理モデルから削除されます。

次の例は、storeclear-textalias の各属性を指定したクレデンシャル参照を作成する方法を示しています。

/subsystem=elytron/key-store=exampleKS:add(relative-to=jboss.server.config.dir, path=example.keystore, type=JCEKS, credential-reference={store=exampleKeyStoreCredentialStore, alias=myNewAlias, clear-text=myNewPassword})
{
    "outcome" => "success",
    "result" => {"credential-store-update" => {
        "status" => "new-entry-added",
        "new-alias" => "myNewAlias"
    }}
}

以前に定義されたクレデンシャルストアに追加された myNewAlias エントリーのクレデンシャルを更新するには、次のコマンドを使用します。

/subsystem=elytron/key-store=exampleKS:write-attribute(name=credential-reference.clear-text,value=myUpdatedPassword)
{
    "outcome" => "success",
    "result" => {"credential-store-update" => {"status" => "existing-entry-updated"}},
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}
注記

credential-reference パラメーターを含む操作に失敗した場合、クレデンシャルストアの自動更新は行われません。

credential-reference 属性で指定されていたクレデンシャルストアは変更されません。

4.1.11. FIPS 140-2 準拠のクレデンシャルストアの定義

Federal Information Processing Standards (FIPS)140-2 に準拠したクレデンシャルストアは、Network Security Services (NSS) のデータベースを使用するか、Bouncy Castle のプロバイダーで定義できます。

4.1.11.1. NSS データベースを使用した FIPS 140-2 対応クレデンシャルストアの定義

FIPS (Federal Information Processing Standards) に準拠したキーストアを入手するには、Sun PKCS#11(PKCS は Public Key Cryptography Standards の略) プロバイダーを使用して、NSS(Network Security Services) データベースにアクセスします。データベースの定義方法については、NSS データベースの設定 を参照してください。

手順

  1. クレデンシャルストアで使用する秘密鍵を作成します。

    注記

    keytool コマンドを動作させるには、nss_pkcsll_fips.cfg ファイルで、nss Db Mode 属性を read Write として割り当てる必要があります。

    $ keytool -keystore NONE -storetype PKCS11 -storepass <keystore_password> -genseckey -alias <key_alias> -keyalg <key_algorithm> -keysize <key_size>
  2. 外部クレデンシャルストアを作成します。外部クレデンシャルストアは PKCS#11 キーストアに秘密鍵を保持し、前の手順で定義したエイリアスを使用してこのキーストアにアクセスします。このキーストアは、Java Cryptography Extension Keystore (JCEKS) キーストアでの認証情報の復号化使用されます。credential-store 属性に加え、credential-store KeyStoreCredentialStore を設定して、外部クレデンシャルストアの設定に使用されます。

    /subsystem=elytron/credential-store=<store_name>:add(modifiable=true, implementation-properties={"keyStoreType"=>"PKCS11", "external"=>"true", "keyAlias"=>"<key_alias>", externalPath="<path_to_JCEKS_file>"}, credential-reference={clear-text="<keystore_password>"}, create=true)
  3. 作成後、クレデンシャルストアを使用して通常通りにエイリアスを保存することができます。

    /subsystem=elytron/credential-store=<store_name>:add-alias(alias="<alias>", secret-value="<sensitive_string>")
  4. クレデンシャルストアから読み取り、エイリアスが正常に追加されたことを確認します。

    /subsystem=elytron/credential-store=<store_name>:read-aliases()

4.1.11.2. Bouncy Castle プロバイダーを使用した FIPS 140-2 準拠のクレデンシャルストアの定義

Bouncy Castle のプロバイダーを使用して、FIPS(Federal Information Processing Standards)140-2 に準拠したクレデンシャルストアを定義します。

前提条件

  • お使いの環境が BouncyCastle プロバイダーを使用するように設定されていることを確認する。

    詳しくは、Bouncy Castle プロバイダーを使用するための環境設定をご覧ください。

手順

  1. クレデンシャルストアで使用する秘密鍵を作成します。

    $ keytool -genseckey -alias<key_alias> -keyalg <key_algorithm> -keysize <key_size> -keystore <path_to_keystore> -storetype BCFKS -storepass <key_and_keystore_password> -keypass <key_and_keystore_password>
    重要

    FIPS クレデンシャルストアを elytron サブシステムで定義するには、キーストアの keypass および storepass が同じである必要があります。

  2. 外部クレデンシャルストアを作成します。外部クレデンシャルストアは BCFKS キーストアの秘密鍵を保持し、前の手順で定義したエイリアスを使用してこのキーストアにアクセスします。その後、このキーストアは JCEKS キーストアの認証情報を復号化するために使用されます。credential-store KeyStoreCredentialStore 実装プロパティー は、外部クレデンシャルストアを設定するために使用されます。

    /subsystem=elytron/credential-store=<BCFKS_credential_store>:add(relative-to=jboss.server.config.dir,credential-reference={clear-text=<key_and_keystore_password>},implementation-properties={keyAlias=<key_alias>,external=true,externalPath=<path_to_credential_store>,keyStoreType=BCFKS},create=true,location=<path_to_keystore>,modifiable=true)
  3. 作成後、クレデンシャルストアを使用して通常通りにエイリアスを保存することができます。

    /subsystem=elytron/credential-store=<BCFKS_credential_store>:add-alias(alias="<alias>", secret-value="<sensitive_string>")
  4. クレデンシャルストアから読み取り、エイリアスが正常に追加されたことを確認します。

    /subsystem=elytron/credential-store=<BCFKS_credential_store>:read-aliases()

4.1.12. クレデンシャルストアのカスタム実装の使用

クレデンシャルストアのカスタム実装の使用

手順

  1. Service Provider Interface (SPI) CredentialStoreSpi 抽象クラスを拡張するクラスを作成します。
  2. Java Security Provider を実装するクラスを作成します。このプロバイダーはカスタムクレデンシャルストアクラスをサービスとして追加する必要があります。
  3. クレデンシャルストアおよびプロバイダークラスが含まれるモジュールを作成し、org.wildfly.security.elytron における依存関係とともに JBoss EAP に追加します。以下に例を示します。

    module add --name=org.jboss.customcredstore --resources=/path/to/customcredstoreprovider.jar --dependencies=org.wildfly.security.elytron --slot=main
  4. プロバイダーのプロバイダーローダーを作成します。以下に例を示します。

    /subsystem=elytron/provider-loader=myCustomLoader:add(class-names=[org.wildfly.security.mycustomcredstore.CustomElytronProvider],module=org.jboss.customcredstore)
  5. カスタム実装を使用してクレデンシャルストアを作成します。

    注記

    適切な 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)

    また、複数のプロバイダーを作成した場合は、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)

4.1.13. 外部ソースからクレデンシャルストアのパスワードの取得

クレデンシャルストアのパスワードをクリアテキスト形式で指定する代わりに、擬似クレデンシャルストアを使用してパスワードを指定することもできます。

パスワードの設定方法には以下のオプションがあります。

EXT

java.lang.Runtime#exec(java.lang.String) を使用した外部コマンド。コマンドのパラメーターには、スペースで区切った文字列のリストを指定できます。外部コマンドは、オペレーティングシステムからの実行可能ファイル (シェルスクリプトや実行可能バイナリーファイルなど) を参照します。Elytron は、実行したコマンドの標準出力からパスワードを読み取ります。

credential-reference={clear-text="{EXT}/usr/bin/getThePasswordScript.sh par1 par2", type="COMMAND"}

CMD

java.lang.ProcessBuilder を使用した外部コマンドコマンドのパラメーターには、コンマで区切った文字列のリストを指定できます。外部コマンドは、オペレーティングシステムからの実行可能ファイル (シェルスクリプトや実行可能バイナリーファイルなど) を参照します。Elytron は、実行したコマンドの標準出力からパスワードを読み取ります。

credential-reference={clear-text="{CMD}/usr/bin/getThePasswordScript.sh par1,par2", type="COMMAND"}

MASK

PBE または Password Based Encryption を使用してマスクされたパスワード。SALT および ITERATION の値が含まれる以下の形式である必要があります。

credential-reference={clear-text="MASK-MASKED_VALUE;SALT;ITERATION"}

credential-reference={clear-text="MASK-NqMznhSbL3lwRpDmyuqLBW==;12345678;123"}

重要

EXTCMD、および MASK は、外部パスワードを提供するレガシーセキュリティー vault スタイルと後方互換性を提供します。MASK には、SALTITERATION の値が含まれる上記の形式を使用する必要があります。

また、別のクレデンシャルストアにあるパスワードを、新しいクレデンシャルストアのパスワードとして使用することもできます。

別のクレデンシャルストアのパスワードで作成されたクレデンシャルストアの例

/subsystem=elytron/credential-store=exampleCS:add(location="cred_stores/exampleCS.jceks", relative-to=jboss.server.data.dir, create=true, credential-reference={store=cred-store, alias=pwd})

4.1.14. セキュリティーで保護されたリソースを解除するための初期キーの JBoss EAP への指定

セキュリティー上の理由から、一部の JBoss EAP コンポーネントは、KeyStoreCredentialStore の PasswordCredential によって保護されます。この KeyStoreCredentialStore は、JBoss EAP の外部に保存されている秘密鍵によって保護されています。これをマスター キーと呼びます。JBoss EAP は起動時にこのマスター キーを使用して KeyStoreCredentialStore のロックを解除し、KeyStoreCredentialStore に保存されている PasswordCredential を取得します。

Elytron の PropertiesCredentialStore を使用して マスター キーを指定できます。また、マスターキーやパスワードを外部から入手することもできます。外部ソースからパスワードを取得する方法は、外部ソースからクレデンシャルストアのパスワードの取得 を参照してください。

4.1.14.1. スタンドアロンサーバー用の Properties Credential Store/secret-key-credential-Store の作成

管理 CLI を使用して Properties Credential Store を作成します。Properties Credential Store を作成すると、JBoss EAP はデフォルトで秘密鍵を生成します。生成された鍵の名前は key で、そのサイズは 256 ビットです。

前提条件

  • 最低でも、JBoss EAP が実行されているユーザーアカウントの PropertiesCredentialStore を含むディレクトリーへの読み取り/書き込みのアクセスが割り当てられている。

手順

  • 次のコマンドを使用して、管理 CLI を使用して PropertiesCredentialStore を作成します。

    構文

    /subsystem=elytron/secret-key-credential-store=<name_of_credential_store>:add(path="<path_to_the_credential_store>", relative-to=<path_to_store_file>)

    /subsystem=elytron/secret-key-credential-store=examplePropertiesCredentialStore:add(path=examplePropertiesCredentialStore.cs, relative-to=jboss.server.config.dir)
    {"outcome" => "success"}

4.1.14.2. Elytron での暗号化式の作成

機密な文字列と SecretKeyCredential から、暗号化式を作成します。この暗号化式を、管理モデルであるサーバー設定ファイルの機密文字列の代わりに使用すして、機密文字列を秘匿できます。

前提条件

手順

  1. 次の管理 CLI コマンドを使用して、クレデンシャルストア内の既存の SecretKeyCredential のエイリアスを参照するリゾルバーを作成します。

    構文

    /subsystem=elytron/expression=encryption:add(resolvers=[{name=<name_of_the_resolver>, credential-store=<name_of_credential_store>, secret-key=<secret_key_alias>}])

    /subsystem=elytron/expression=encryption:add(resolvers=[{name=exampleResolver, credential-store=examplePropertiesCredentialStore, secret-key=key}])

    リソースの重複に関するエラーメッセージが表示された場合は、以下のように、add ではなく list-add 操作を行ってください。

    構文

    /subsystem=elytron/expression=encryption:list-add(name=resolvers, value={name=<name_of_the_resolver>, credential-store=<name_of_credential_store>, secret-key=<secret_key_alias>})

    /subsystem=elytron/expression=encryption:list-add(name=resolvers,value={name=exampleResolver, credential-store=examplePropertiesCredentialStore, secret-key=key})
    {
        "outcome" => "success",
        "response-headers" => {
            "operation-requires-reload" => true,
            "process-state" => "reload-required"
        }
    }

  2. 以下の管理 CLI コマンドでサーバーをリロードします。

    reload
  3. 管理 CLI でのコマンドのキャッシングを無効にします。

    重要

    キャッシングを無効にしない場合は、管理 CLI の履歴ファイルにアクセスできるユーザーは誰でも、秘密鍵を確認できます。

    history --disable
  4. 以下の管理 CLI コマンドを使用して、暗号化式を作成します。

    構文

    /subsystem=elytron/expression=encryption:create-expression(resolver=<existing_resolver>, clear-text=<sensitive_string_to_protect>)

    /subsystem=elytron/expression=encryption:create-expression(resolver=exampleResolver, clear-text=TestPassword)
    {
        "outcome" => "success",
        "result" => {"expression" => "${ENC::exampleResolver:RUxZAUMQgtpG7oFlHR2j1Gkn3GKIHff+HR8GcMX1QXHvx2uGurI=}"}
    }

    ${ENC::example Resolver:RUx ZAUMQgtp G7o Fl HR2j1Gkn3GKIHff+HR8Gc MX1QXHvx2u Gur I=} は、管理モデルで Test Password の代わりに使用する暗号化式です。

    同じプレーンテキストをさまざまな場所で使用する場合は、対処の場所でプレーンテキストの代わりに、毎回このコマンドを繰り返してから暗号化式を使用します。同じプレーンテキストに対して同じコマンドを繰り返すと、同じキーでも異なる結果が得られます。これは、Elytron が呼び出しごとに固有の初期化ベクトルを使用しているためです。

    異なる暗号化式を使用して、文字列の暗号化式 1 つが侵害された場合に、他の暗号化式にも同じ文字列が含まれていることをユーザーが発見できないようにします。

  5. 以下の管理 CLI コマンドを使用して、コマンドキャッシングを再度有効にします。

    history --enable

4.1.14.3. 暗号化式を使用した KeyStoreCredentialStore/credential-store の保護

Key Store Credential Store を保護するために、暗号化式を使用できます。

前提条件

手順

  • 暗号化式を clear-text として使用する KeyStoreCredentialStore を作成します。

    構文

    /subsystem=elytron/credential-store=<name_of_credential_store>:add(path=<path_to_the_credential_store>, create=true, modifiable=true, credential-reference={clear-text=<encrypted_expression>})

    /subsystem=elytron/credential-store=secureKeyStoreCredentialStore:add(path="secureKeyStoreCredentialStore.jceks", relative-to=jboss.server.data.dir, create=true, modifiable=true, credential-reference={clear-text=${ENC::exampleResolver:RUxZAUMQgtpG7oFlHR2j1Gkn3GKIHff+HR8GcMX1QXHvx2uGurI=}})
    {"outcome" => "success"}

KeyStoreCredentialStore を暗号化式で保護した後、KeyStoreCredentialStore で SecretKeyCredential を生成し、その秘密鍵を使用して別の暗号化式を作成できます。そして、この新しい暗号化式は、管理モデル (サーバー設定ファイル) の機密な文字列の代わりに使用できます。クレデンシャルストアのチェーン全体を作成してセキュリティーを確保できます。このようなチェーンは、文字列が以下のように保護されているため、機密な文字列を推測することが難しくなります。

  • 最初の暗号化式は、KeyStoreCredentialStore のセキュリティーを保護します。
  • また、別の暗号化式では、機密文字列のセキュリティーを確保します。
  • 機密な文字列の解読には、暗号化式を両方、解読する必要があります。

暗号化式のチェーンが長くなればなるほど、機密な文字列の復号化は困難になります。

4.1.15. パスワード vault からクレデンシャルストアへの変換

WildFly Elytron ツールを使用することで、パスワード vault をクレデンシャルストアに変換できます。パスワード vault をクレデンシャルストアに変換するには、vault の初期化時に vault の値を 使用する必要があります。

注記

パスワード vault を変換する際に、新しいクレデンシャルストアのエイリアスは、同等のパスワード vault ブロックおよび属性名 (VAULT_BLOCK::ATTRIBUTE_NAME) に基づいて、以下の形式で名前が付けられます。

4.1.15.1. WildFly Elytron Tool を使用した、単一パスワード vault のクレデンシャルストアへの変換

WildFly Elytron Tool を使用して 1 つのパスワード 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>

    たとえば、--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
注記

--summary 引数を使用して、変換に使用する管理 CLI コマンドの概要を出力することもできます。プレーンテキストのパスワードが使用される場合でも、これはサマリー出力でマスクされることに注意してください。このコマンドで指定しない限り、デフォルトの saltiteration の値が使用されます。

4.1.15.2. WildFly Elytron Tool を使用した、パスワード vault のクレデンシャルストアへの一括変換

複数のパスワード vault をクレデンシャルストアに一括で変換します。

手順

  1. 以下の形式で、変換する vault の詳細を記述ファイルに配置します。

    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
    1
    vault にプレーンテキストのパスワードを指定する場合は salt および iteration は省略できます。
    2
    変換したクレデンシャルストアの場所とファイル名を指定します。
    3
    オプション: オプションパラメーターのリストをセミコロン区切り (;) で指定します。利用可能なパラメーターのリストは、EAP_HOME/bin/elytron-tool.sh vault --help を参照してください。

    以下に例を示します。

    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
  2. 直前の手順の説明ファイルを使用して、一括変換コマンドを実行します。

    $ EAP_HOME/bin/elytron-tool.sh vault --bulk-convert vaultdescriptions.txt

詳細は、EAP_HOME/bin/elytron-tool.sh vault --help コマンドを使用して、利用可能なオプションの詳細な一覧を表示してください。

4.1.16. Elytron クライアントでのクレデンシャルストアの使用例

Jakarta Enterprise Beans などの 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"> 1
        <protection-parameter-credentials>
          <credential-store-reference clear-text="pass123"/> 2
        </protection-parameter-credentials>
        <attributes>
          <attribute name="location" value="/path/to/my_store.jceks"/> 3
        </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"/> 4
        </credentials>
      </configuration>
    </authentication-configurations>
    ...
  </authentication-client>
</configuration>

1
Elytron クライアント設定ファイル内で使用するクレデンシャルストアの名前。
2
クレデンシャルストアのパスワード。
3
クレデンシャルストアファイルへのパス。
4
クレデンシャルストアに保存される機密文字列のクレデンシャル参照。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.