第17章 データソースのパスワードの暗号化
JBoss Enterprise Application Platform のデーターベース接続は
*-ds.xml データソースファイルで定義されます。これらのデーターベース接続の詳細はクリアテキストのパスワードを含みます。サーバーの安全性を高めるためには、データソースファイルのクリアテキストのパスワードを暗号化されたパスワードと置換します。
本項ではデータソースのパスワードを暗号化するためのメソッドを 2 つ示します。
モジュール
SecureIdentityLoginModule を使用した セキュアなアイデンティティ は 「セキュアなアイデンティティ」 で説明します。
モジュール
JaasSecurityDomainIdentityLoginModule を使用した パスワードベースの暗号化を使用した設定されたアイデンティティ は 「セキュアなアイデンティティ」 で説明します。
17.1. セキュアなアイデンティティ
データソースの設定がサーバーにより必要な場合に、クラス
org.jboss.resource.security.SecureIdentityLoginModule を使用して、データーベースのパスワードを暗号化しパスワードの復号化されたバージョンを提供します。SecureIdentityLoginModule はハードコードされたパスワードを使用して、データソースのパスワードを暗号化 / 復号化します。
手順17.1 概要 : SecureIdentityLoginModule を使用したデータソースのパスワードの暗号化
- データソースのパスワードの暗号化
- 暗号化されたパスワードでのアプリケーションの認証ポリシーの作成
- アプリケーションの認証ポリシーを使用するためのデータソースの設定
17.1.1. データソースのパスワードの暗号化
データソースのパスワードは、クリアテキストのパスワードを渡すことによって
SecureIdentityLoginModule メインメソッドを使用して暗号化されます。SecureIdentityLoginModule は jbosssx.jar により提供されます。
手順17.2 データソースのパスワードの暗号化 - Platform 5.0 および 5.0.1 バージョン
これは JBoss Enterprise Application Platform 5.0 および 5.0.1 バージョンでデータソースのパスワードを暗号化する手順です。
- ディレクトリを
jboss-asディレクトリに変更します。 - 次のコマンドで 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 およびそれ以降のバージョンのデータソースのパスワードを暗号化する手順です。
- ディレクトリを
jboss-asディレクトリに変更します。 - 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> 要素と置換します。この要素には次の 「暗号化されたパスワードでのアプリケーションの認証ポリシーの作成」 で指定されたアプリケーションの認証ポリシーの名前が含まれます。
「暗号化されたパスワードでのアプリケーションの認証ポリシーの作成」 からサンプル名を使用すると、「EncryptDBPassword」は 例17.2「セキュアなアイデンティティを使用したデータソースのファイルの例」 のようなデータソースのファイルになります。
例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>