【问题标题】:JBoss AS 7.1 - datasource how to encrypt passwordJBoss AS 7.1 - 数据源如何加密密码
【发布时间】:2016-08-02 03:47:04
【问题描述】:

在 JBoss AS 5 中,我在 *-ds.xml 中定义了一个数据源,但将用户名/加密密码放在 *-jboss-beans.xml 中。

现在在 JBoss AS 7.1 中,数据源在standalone.xml 或 domain.xml 中定义。 在 AS 7.1 中我应该把加密密码放在哪里?

换句话说,明文密码在 AS 7 中是如何加密和保护的?

【问题讨论】:

    标签: java security jboss password-protection jboss7.x


    【解决方案1】:

    在 AS7 中,您可以使用 SecureIdentityLoginModule 添加加密的密码域。例如,您可以在standalone.xml 或 domain.xml 中定义一个安全域:

    <security-domain name="EncryptedPassword">
      <authentication>
        <login-module code="SecureIdentity" flag="required">
          <module-option name="username" value="test"/>
          <module-option name="password" value="encrypted_password"/>
        </login-module>
      </authentication>
    </security-domain>
    

    然后您可以在您的特定数据源中添加此安全域,该数据源在 Standalone.xml 或 domain.xml 中使用此 userid/pwd 组合:

      <datasource ... >
           .....
           <security>
                  <security-domain>EncryptedPassword</security-domain>
           </security>
      </datasource>
    

    要对密码本身进行加密,您可以运行此命令(请验证您的特定 AS7 下载中的 picketbox jar 和 logging jar 的版本以进行相应替换):

    java -cp $JBOSS_HOME/modules/org/picketbox/main/picketbox-4.0.6.<beta|final>.jar:$JBOSS_HOME/modules/org/jboss/logging/main/jboss-logging-3.1.0.<some_version>.jar:$CLASSPATH org.picketbox.datasource.security.SecureIdentityLoginModule password
    

    这将返回一个加密的密码,您可以在您的安全域中使用该密码。

    您可以阅读有关 JBoss AS7 安全子系统 here 的更多信息。由于开源摇滚,你可以在SecureIdentityLogin的源代码中看到编码代码是如何工作的。您会在源代码中注意到它使用Blowfish 进行加密。

    【讨论】:

    • 另见 shatk 的回答,需要提供 managedConnectionFactoreName 模块选项。
    • 博客post描述这些步骤和完整的数据源文件
    【解决方案2】:

    以下是 Jboss AS-7 的完整安全域配置:

         <security-domains>
            <!--  Security Setting's --> 
            <security-domain name="encryptedSecurity" cache-type="default">
                <authentication>
                    <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                    <module-option name="username" value="user_name"/>
                    <module-option name="password" value="encrypted_password"/>
                    <module-option name="managedConnectionFactoryName" value="jboss.jca:service=LocalTxCM,name=dataSource-1-PoolName,dataSource-2-PoolName"/>
                </login-module>
                </authentication>
            </security-domain>
    

    【讨论】:

    • 实际上是否可以为多个数据源使用相同的安全模块?我一直在阅读 jboss 文档,他们只提到了一个数据源:jboss.jca:service={type},name={jndiName}。我看到你指定了 name=dataSource-1-PoolName,dataSource-2-PoolName
    【解决方案3】:

    对于有兴趣在 Windows 上运行它的人(在我的例子中是在 JBoss EAP 6.4...)

    set JBOSS_HOME=C:\dev\jboss\jboss-eap-6.4
    set MYPATH=%JBOSS_HOME%\modules\system\layers\base\org\picketbox\main\picketbox-4.1.1.Final-redhat-1.
    jar;%JBOSS_HOME%\modules\system\layers\base\org\jboss\logging\main\jboss-logging-3.1.4.GA-redhat-2.jar;
    java -classpath %MYPATH% org.picketbox.datasource.security.SecureIdentityLoginModule SecretPass
    
    Encoded password: 13e0362237c93a9cda89f5b3da271521
    

    希望这会有所帮助, 马特奥

    【讨论】:

      【解决方案4】:

      在 CentOS 6.3 版的环境中,JBoss-EAP-6.0.0 这只适用于 code="SecureIdentity", 使用 picketbox-4.0.9.Final-redhat-1.jar 进行密码加密。

      <security-domain name="some-ds-EncryptedPassword">
        <authentication>
          <login-module code="SecureIdentity" flag="required">
            <module-option name="username" value="username"/>
            <module-option name="password" value="encrypted_password"/>
          </login-module>
        </authentication>
      </security-domain>
      

      code="SecureIdentityLogin" 给出“PB00024:访问被拒绝:未经身份验证的呼叫者:null”。

      来源:https://docs.jboss.org/author/display/AS7/Security+subsystem+configuration

      【讨论】:

        【解决方案5】:

        用 jars 创建简单的项目( jboss-logging-3.1.4.GA-redhat-2.jar Picketbox-4.1.1.Final-redhat-1.jar Picketbox-commons-1.0.0.final-redhat-3.jar picketbox-infinispan-4.1.1.Final-redhat-1.jar)并使用输入参数运行自定义类:

        public class Test {
        
            public static void main(String[] args) throws Exception {
                new org.picketbox.datasource.security.SecureIdentityLoginModule()
                        .main(args);
        
            }
        
        }
        

        输出将是:编码密码:3d5bc094c128...

        【讨论】:

          猜你喜欢
          • 2012-06-04
          • 1970-01-01
          • 1970-01-01
          • 2011-10-23
          • 1970-01-01
          • 2019-11-24
          • 1970-01-01
          • 2013-05-11
          • 1970-01-01
          相关资源
          最近更新 更多