【问题标题】:Encrypting password for c3p0 ComboPooledDataSourcec3p0 ComboPooledDataSource 的加密密码
【发布时间】:2013-01-29 12:14:44
【问题描述】:

我目前有一个 server.xml 配置,其中包含以下内容

<Resource auth="Container"
    description="DB Connection"
    driverClass="oracle.jdbc.driver.OracleDriver"
    maxPoolSize="40"
    minPoolSize="2"
    aquireIncrement="1"
    name="jdbc/FOOBAR"
    user="foo"
    password="bar"
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="path:to:db:port:db" />

出于显而易见的原因,我要求不再允许用户名/密码在 server.xml 文件中以明文形式显示。

我在网上看了一点,遇到了How to Secure Tomcat Database Passwords for Java Encrypt username and password for JNDI in Tomcat Server.xml和许多其他页面;但是,我有点卡住了。

我首先查看了扩展 BasicDataSourceFactory - 但由于我使用 c3p0 CombinedPooledDataSource,它似乎无法发生。然后,我尝试通过实现 PooledDataSource、Serializable 和 Referenceable 来创建 c3p0 数据源包装器,但这也不起作用。

我读到我可以通过使 auth="Container" => auth="Application" 将身份验证移动到服务器端。但是,我不确定如何使用 Hibernate 来实现其余部分。

任何帮助都会很棒。

【问题讨论】:

    标签: apache hibernate jakarta-ee tomcat c3p0


    【解决方案1】:

    因此,这将不是一个高安全性的解决方案。

    但解决这个问题的一个简单方法是利用 c3p0 的“密码”属性只是一个可配置的 c3p0 属性这一事实,可以通过多种方式进行设置。因此,您可以创建一个 c3p0.properties 文件和/或一个 c3p0-config.xml 文件,并在那里设置密码。或者,您可以确保在运行 JVM 时设置了系统属性 c3p0.password。

    如果您将拥有多个具有不同密码的数据源,则需要使用 c3p0 的命名配置功能,即 c3p0-config.xml 文件。

    c3p0 配置(c3p0.properties 和 c3p0-config.xml)文件可以卡在应用程序有效 CLASSPATH 中 jar 文件的顶层。 (使用 tomcat,您必须注意 Web 应用特定的 ClassLoader 和更广泛共享的位置之间的区别。)因此,您可以将密码嵌入压缩的 jar 文件而不是纯文本文件中。显然,这是不安全的:明文只是“解压缩”而已。但它会防止密码被随便greppable之类的。

    请看http://www.mchange.com/projects/c3p0/#configuration_files

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 2019-12-08
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多