29856


Wildflyのstandalone.xmlに、データソースへの接続情報がありますが、ここにはDBのユーザパスワードが平文のまま書かれています。  
これを暗号化（standalone.xmlをテキストエディタで開いても平文が分からない状態に）したいのですが、方法はありますか？

Wildflyではできないが、JBossEAPならできる、という情報でも助かります。


CC BY-SA 3.0
2016-10-12T10:22:44.320
29502
2018-05-11T14:17:32.207
2018-05-11T14:17:32.207
19769
8078
question
java wildfly
Wildflyのstandalone.xmlでデータソースのパスワードを暗号化したい


方法はあります。

以下WildFly 10.0.0で検証した結果を記載します。  
デフォルトのstandalone.xmlにあったH2データベースのデータソースを対象にします。

まずパスワードを暗号化します。暗号化するためのライブラリが提供されています。  
それを使いパスワードを暗号化します。ここではパスワード文字列は"sa"

[code]

    $ java -cp /usr/local/opt/wildfly-as/libexec/modules/system/layers/base/org/picketbox/main/picketbox-4.9.4.Final.jar:/usr/local/opt/wildfly-as/libexec/modules/system/layers/base/org/jboss/logging/main/jboss-logging-3.3.0.Final.jar org.picketbox.datasource.security.SecureIdentityLoginModule sa       
    Encoded password: 9fdd42c2a7390d3
    
[/code]

私はWildFlyを`/usr/local/opt/wildfly-
as/libexec`ディレクトリにインストールしています。ここを実際にインストールしたディレクトリに書き換えてください。

暗号化したパスワード`9fdd42c2a7390d3`を使いstandalone.xmlを変更します。  
以下の行を追加します。

[code]

            <security-domains>
                ...(中略)
                <security-domain name="EncryptedPassword">
                  <authentication>
                    <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                      <module-option name="username" value="sa"/>
                      <module-option name="password" value="9fdd42c2a7390d3"/>
                      <module-option name="managedConnectionFactoryName" value="jboss.jca:service=LocalTxCM,name=dwh"/>
                    </login-module>
                  </authentication>
                </security-domain>                
            </security-domains>
    
[/code]

name="username"の値は、実際のユーザ名に書き換えてください。name="password"の値を、先ほど暗号化した値に書き換えます。

さらに、以下の行を変更します。

[code]

        <subsystem xmlns="urn:jboss:domain:datasources:4.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</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>
    
[/code]

要素の部分を次のように変更します。

[code]

                    <security>
                        <security-domain>EncryptedPassword</security-domain>                      
                    </security>
    
[/code]

これで、`<security-domain name="EncryptedPassword">`のユーザ名とパスワードを使用します。

最後に、接続確認をします。

[code]

    $ ./standalone.sh
    
    $ ./jboss-cli.sh
    You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
    [disconnected /] connect
    [standalone@localhost:9990 /] /subsystem=datasources:read-resource(recursive=true)
    {
        "outcome" => "success",
        "result" => {
            "data-source" => {"ExampleDS" => {
                "allocation-retry" => undefined,
    ...（中略）...
            }},
            "jdbc-driver" => {"h2" => {
                "deployment-name" => undefined,
                "driver-class-name" => undefined,
                "driver-datasource-class-name" => undefined,
                "driver-major-version" => undefined,
                "driver-minor-version" => undefined,
                "driver-module-name" => "com.h2database.h2",
                "driver-name" => "h2",
                "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource",
                "jdbc-compliant" => undefined,
                "module-slot" => undefined,
                "profile" => undefined,
                "xa-datasource-class" => undefined
            }},
            "xa-data-source" => undefined
        }
    }
    
[/code]

ここでのデータソース名は`ExampleDS`です。このデータソースにテスト接続します。

[code]

    [standalone@localhost:9990 /] /subsystem=datasources/data-source=ExampleDS:test-connection-in-pool
    {
        "outcome" => "success",
        "result" => [true]
    }
    
[/code]

接続できました。

なお、こちらを参考に、私の方で実際に検証しました。  
[jboss7.x - WildFly datasource password protection - Stack
Overflow](https://stackoverflow.com/questions/30731694/wildfly-datasource-
password-protection)


CC BY-SA 3.0
2016-10-24T05:03:14.203
29856
2016-10-24T05:03:14.203
2017-05-23T12:38:55.250
-1
4464
29502
answer