【问题标题】:Custom JBoss DataSorurce password encryption?自定义 JBoss DataSorurce 密码加密?
【发布时间】:2012-04-05 13:07:09
【问题描述】:

我正在使用 JBoss 4.2.1GA

您可能现在有一种方法可以避免使用JBoss DataSoruce's password in plain text。然而,当您查看org.jboss.resource.security.SecureIdentityLoginModule decodeencode 方法的实现方式时,这种技术有一个基本的安全缺陷就会变得很明显。加密基本上是使用固定密钥的常规河豚(“jaas is the way”)。

我正在寻找一种方法来更改我选择的固定密钥或更改加密/解密的完成方式。

我倾向于认为可以通过重新实现 SecureIdentityLoginModule 来完成,这很好,但我很难相信没有现成可用的选项(目前还没有找到)

有人做过这样的事吗?

【问题讨论】:

标签: security encryption jboss datasource jboss-4.2.x


【解决方案1】:

对于这个问题,至少对于 JBoss 4.0.x,有一个未解决的 bug 票:https://issues.jboss.org/browse/JBAS-4460

注意评论:

“加密数据库”密码用于通过愚蠢的安全审核。最终在某个地方会有某种密码,因为系统需要解密密码才能将其发送到数据库。对于一个相对有经验的程序员来说,破解它总是很容易的。文件系统/操作系统安全 + 传输安全是您唯一的希望。

评论者所说的是所有安全系统的共同问题:在某些时候有一个可以解密的密钥。确保你的服务器的文件系统安全性已经确定,这样这个密钥就不会被轻易访问,你应该没问题。

【讨论】:

    【解决方案2】:

    查看以下wiki 文档。它描述了两种加密 JBoss 密码的方法。第一个是您所描述的,第二个是基于密码的加密。

    【讨论】:

    • 是的,我看到了 JBoss 手册。它只是用于混淆的接缝,看起来你最终从你开始的地方开始,在某处以纯文本形式出现东西。我确实看到了 =D,非常感谢!
    【解决方案3】:

    好的,这就是我完成这项工作的方式(我正在开发 JBOSS 4.2.1 GA 和 Oracle,因此版本和数据库供应商之间的某些内容可能会有所不同):

    您需要扩展AbstractPasswordCredentialLoginModule

    我的(称为PGPLoginModule)基于称为SecureIdentityLoginModule 的开箱即用实现与我的唯一区别是解码和编码方法使用不同的加密算法和过程(我正在使用 PGP 证书来解密存储密码的属性文件)类似于this article 中的解释,但您可以使用您喜欢的任何方法。

    您需要在 jboss 库文件夹中添加以下 jar 以解决依赖关系:

    • [JBOSS_HOME]/lib/jboss-common.jar
    • [JBOSS_HOME]/lib/jboss-jmx.jar
    • [JBOSS_HOME]/server/default/lib/jbosssx.jar
    • [JBOSS_HOME]/server/default/lib/jboss-jca.jar

    您需要 JAR 类并将 jar 放在以下任一位置:

    • [JBOSS_HOME]/server/default/lib

    • [JBOSS_HOME]/lib

    当你拥有它时,你需要在 jboss 的 login-config.xml 中定义的安全域上配置它,以便它使用你的类(我的是 org.company.resource.security.PGPLoginModule ) 而不是使用默认的,所以它看起来像:

    <application-policy name="PGPDomain">
            <authentication>
                <login-module code="org.company.resource.security.PGPLoginModule" flag="required">
                    <module-option name="username">[DB_USER]</module-option>
                    <module-option name="password">[ENCTRYPTED_PASSWORD]</module-option>
                    <module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=OracleDS</module-option>
                </login-module>
            </authentication>
        </application-policy>
    

    请注意,根据您决定使用的强度和算法,您可能需要将Java Cryptography Extension Unlimited Strength Policy Files 安装到您的 JRE。

    我希望有人觉得它有用。

    【讨论】:

    • 我正在尝试扩展 AbstractPasswordCredentialLoginModule 并按照您的建议进行配置。但我收到以下错误:11:58:50,251 ERROR [ExceptionUtil] org.jboss.jms.server.plugin.JDBCJMSUserManagerService@3cf28f60 startService java.lang.SecurityException: Unauthenticated caller:null 知道我是否遗漏了什么?
    • 你是在我做的同一个 JBoss 版本上做这个吗?
    • 我在 JBoss 5.1.0.GA 上执行此操作。我设法通过一些更改来解决这个问题。我必须实现一些类,比如 Action,它们只是本地包。
    猜你喜欢
    • 2010-11-06
    • 2017-10-28
    • 2017-04-20
    • 1970-01-01
    • 2023-03-07
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多