9.11.5. Java キーストアに暗号化された機密性の高い文字列を保存し読み出しする

概要

パスワードや機密性の高いその他の文字列が平文の設定ファイルに含まれるのは安全ではありません。Enterprise Application Platform には、このような機密性の高い文字列をマスキングして暗号化されたキーストアに保存する機能や、設定ファイルでマスクされた値を使用する機能が含まれています。

手順9.16 タスク

  1. vault.sh コマンドを実行します。

    EAP_HOME/bin/util/vault.sh を実行します。0 を入力して新しい対話セッションを開始します。
  2. 暗号化されたファイルが保存されるディレクトリを入力します。

    「機密性が高い文字列を格納する Java キーストアの作成」 に従って作業を行った場合はキーストアはホームディレクトリの vault/ というディレクトリにあります。ほとんどの場合では、暗号化されたすべての情報をキーストアとして同じ場所に保存するのが普通です。この例では /home/USER/vault/ ディレクトリを使用します。

    注記

    必ずディレクトリ名の最後にスラッシュが含まれるようにしてください。ご使用のオペレーティングシステムに応じて / または \ を使用します。
  3. キーストアへのパスを入力します。

    キーストアファイルへの完全パスを入力します。この例では /home/USER/vault/vault.keystore を使用します。
  4. キーストアパスワード、ボールト名、ソルト、反復回数を入力します。

    入力を促されたら、キーストアパスワード、ボールト名、ソルト、反復回数を入力します。ハンドシェイクが実行されます。
  5. パスワードを保存するオプションを選択します。

    オプション 0 を選択して、パスワードや機密性の高い他の文字列を保存します。
  6. 値を入力します。

    入力を促されたら、値を 2 回入力します。値が一致しない場合は再度入力するよう要求されます。
  7. ボールトブロックを入力します。

    同じリソースに関連する属性のコンテナであるボールトブロックを入力します。属性名の例としては ds_ExampleDS などが挙げられます。データソースまたは他のサービス定義で、暗号化された文字列への参照の一部を形成します。
  8. 属性名を入力します。

    保存する属性の名前を入力します。 password が属性名の例の 1 つになります。
    結果

    以下のようなメッセージが属性が保存されたことを示します。

    Attribute Value for (ds_ExampleDS, password) saved
  9. 暗号化された文字列に関する情報を書き留めます。

    メッセージはボールトブロック、属性名、共有キー、設定で文字列を使用する場合のアドバイスを示す標準出力を出力します。安全な場所にこの情報を書き留めておいてください。出力例は次の通りです。
    ********************************************
    Vault Block:ds_ExampleDS
    Attribute Name:password
    Shared Key:N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0
    Configuration should be done as follows:
    VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0
    ********************************************
    
  10. 設定で暗号化された文字列を使用します。

    プレーンテキストの文字列の代わりに前の設定手順の文字列を使用します。上記の暗号化されたパスワードを使用するデータソースが以下に示されています。
    ...
      <subsystem xmlns="urn:jboss:domain:datasources:1.0">
        <datasources>
          <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS">
            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
            <driver>h2</driver>
            <pool></pool>
            <security>
              <user-name>sa</user-name>
              <password>VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0</password>
            </security>
          </datasource>
          <drivers>
             <driver name="h2" module="com.h2database.h2">
                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
             </driver>
          </drivers>
        </datasources>
      </subsystem>
    ...
    
    
    ドメインまたはスタンドアローン設定ファイルのどこにでも暗号化された文字列を使用することができます。文字列をキーストアに保存した後、次の構文を使用してクリアテキストの文字列を暗号化された文字列に置き換えます。
    ${VAULT::<replaceable>VAULT_BLOCK</replaceable>::<replaceable>ATTRIBUTE_NAME</replaceable>::<replaceable>ENCRYPTED_VALUE</replaceable>
    
    実環境の値の例は次の通りです。ボールトブロックは ds_ExampleDS、属性は password です。
    <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>