第17章 データソースのパスワードの暗号化

JBoss Enterprise Application Platform のデーターベース接続は *-ds.xml データソースファイルで定義されます。これらのデーターベース接続の詳細はクリアテキストのパスワードを含みます。サーバーの安全性を高めるためには、データソースファイルのクリアテキストのパスワードを暗号化されたパスワードと置換します。
本項ではデータソースのパスワードを暗号化するためのメソッドを 2 つ示します。
モジュール SecureIdentityLoginModule を使用した セキュアなアイデンティティ「セキュアなアイデンティティ」 で説明します。
モジュール JaasSecurityDomainIdentityLoginModule を使用した パスワードベースの暗号化を使用した設定されたアイデンティティ「セキュアなアイデンティティ」 で説明します。

17.1. セキュアなアイデンティティ

データソースの設定がサーバーにより必要な場合に、クラス org.jboss.resource.security.SecureIdentityLoginModule を使用して、データーベースのパスワードを暗号化しパスワードの復号化されたバージョンを提供します。SecureIdentityLoginModule はハードコードされたパスワードを使用して、データソースのパスワードを暗号化 / 復号化します。

手順17.1 概要 : SecureIdentityLoginModule を使用したデータソースのパスワードの暗号化

  1. データソースのパスワードの暗号化
  2. 暗号化されたパスワードでのアプリケーションの認証ポリシーの作成
  3. アプリケーションの認証ポリシーを使用するためのデータソースの設定

17.1.1. データソースのパスワードの暗号化

データソースのパスワードは、クリアテキストのパスワードを渡すことによって SecureIdentityLoginModule メインメソッドを使用して暗号化されます。SecureIdentityLoginModule は jbosssx.jar により提供されます。

手順17.2 データソースのパスワードの暗号化 - Platform 5.0 および 5.0.1 バージョン

これは JBoss Enterprise Application Platform 5.0 および 5.0.1 バージョンでデータソースのパスワードを暗号化する手順です。
  1. ディレクトリを jboss-as ディレクトリに変更します。
  2. 次のコマンドで SecureIdentityLoginModule を呼び出し、PASSWORD としてクリアテキストのパスワードを提供します。
    Linux でのコマンド

    java -cp client/jboss-logging-spi.jar:common/lib/jbosssx.jar \ 
    org.jboss.resource.security.SecureIdentityLoginModule PASSWORD

    Windows でのコマンド

    java -cp client\jboss-logging-spi.jar;common\lib\jbosssx.jar \
     org.jboss.resource.security.SecureIdentityLoginModule PASSWORD

    結果

    コマンドは暗号化されたパスワードを返します。

手順17.3 データソースのパスワードの暗号化 - Platform 5.1 およびそれ以降のバージョン

これは JBoss Enterprise Application Platform versions 5.1 およびそれ以降のバージョンのデータソースのパスワードを暗号化する手順です。
  1. ディレクトリを jboss-as ディレクトリに変更します。
  2. Linux でのコマンド

    java -cp client/jboss-logging-spi.jar:lib/jbosssx.jar \
     org.jboss.resource.security.SecureIdentityLoginModule PASSWORD

    Windows でのコマンド

    java -cp client\jboss-logging-spi.jar;lib\jbosssx.jar \
     org.jboss.resource.security.SecureIdentityLoginModule PASSWORD

    結果

    コマンドは暗号化されたパスワードを返します。

17.1.2. 暗号化されたパスワードでのアプリケーションの認証ポリシーの作成

各 JBoss Application Server サーバープロファイルには conf/login-config.xml ファイルがあり、アプリケーションの認証ポリシーはそのプロファイルに対して定義されます。ご使用の暗号化されたパスワードに対するアプリケーションの認証ポリシーを作成するには、新しい <application-policy> 要素を <policy> 要素に追加します。
例17.1「暗号化されたデータソースのパスワードを使用したアプリケーションの認証ポリシーの例」 は「EncryptDBPassword」という名前のアプリケーションの認証ポリシーを示す login-config.xml ファイルの一部です。

例17.1 暗号化されたデータソースのパスワードを使用したアプリケーションの認証ポリシーの例

  
  <policy>
  ...
      <!-- Example usage of the SecureIdentityLoginModule -->
      <application-policy name="EncryptDBPassword">
          <authentication>
              <login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
                  <module-option name="username">admin</module-option>
                  <module-option name="password">5dfc52b51bd35553df8592078de921bc</module-option>
                  <module-option name="managedConnectionFactoryName">jboss.jca:name=PostgresDS,service=LocalTxCM</module-option>
              </login-module>
          </authentication>
      </application-policy>
  </policy>

SecureIdentityLoginModule モジュールのオプション

user name
データーベースへの接続を確立するときに使用するユーザー名を指定します。
password
「データソースのパスワードの暗号化」 で生成された暗号化されたパスワードを提供します。
managedConnectionFactoryName
jboss.jca:name
このデータソースの Java Naming and Directory Interface (JNDI) の名前を指定します。
jboss.jca:service
トランザクションのタイプを指定します。

トランザクションのタイプ

NoTxCM
トランザクションのサポートはありません。
LocalTxCM
単一のリソーストランザクションのサポートがあります。
TxCM
単一のリソースまたは分散トランザクションのサポートがあります。
XATxCM
分散トランザクションのサポートがあります。

17.1.3. アプリケーションの認証ポリシーを使用するためのデータソースの設定

ランタイム時には、アプリケーションポリシーはアプリケーションポリシーの名前で JNDI にバインドされ、セキュリティドメインとして使用可能です。
データソースは *-ds.xml ファイルで設定されます。 <user-name> および <password> 要素をこのファイルから削除し、<security-domain> 要素と置換します。この要素には次の 「暗号化されたパスワードでのアプリケーションの認証ポリシーの作成」 で指定されたアプリケーションの認証ポリシーの名前が含まれます。

例17.2 セキュアなアイデンティティを使用したデータソースのファイルの例


<?xml version="1.0" encoding="UTF-8"?>
<datasources>
    <local-tx-datasource>
        <jndi-name>PostgresDS</jndi-name>
        <connection-url>jdbc:postgresql://127.0.0.1:5432/test?protocolVersion=2</connection-url>
        <driver-class>org.postgresql.Driver</driver-class>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>20</max-pool-size>

        <!-- REPLACED WITH security-domain BELOW
        <user-name>admin</user-name>
        <password>password</password>
        -->

        <security-domain>EncryptDBPassword</security-domain>

        <metadata>
            <type-mapping>PostgreSQL 8.0</type-mapping>
        </metadata>
    </local-tx-datasource>
</datasources>