2014-04-14 131 views
3

我做了很多搜索,但仍找不到解决方案。Tomcat连接池上的SSL

在我的项目中,我为postgresql使用Tomcat连接池和C3P0连接池。我拒绝使用JDBC连接池,因为它不是由postgresql正式提出的。

现在我需要在这些池上启用SSL/TLS。我认为这应该是一个相当普遍的需求。我在JDBC池中发现了一些例子,但不是用于tomcat或c3p0。我真的想知道,如果tomcat和c3p0 poolings可以配置SSL!

有人可以参考这个主题的任何资源吗?

回答

3

SSL传输应该对c3p0非常透明。只是set up your postgres RDBMS to use SSL。 postgres JDBC驱动程序supports SSL connections。如果您使用的是自签名证书(而不是由某个知名证书颁发机构签署的证书),则必须使用configure your JVM to recognize your self-signed certificate or the JDBC driver not to validate certificates。您需要登录到configure several postgres-specific JDBC Connection Properties。要做到这一点,最简单的方法是只需附加的属性为标准URL风格PARAMS到你的Postgres-JDBC网址:

jdbc:postgresql://myhost.mydomain/mydb?ssl=true 

或(危险)

jdbc:postgresql://myhost.mydomain/mydb?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory 

如果要配置这些应该工作用户名和密码(照常)通过c3p0配置参数。或者,您可以在Properties对象中配置所有Connection参数。以下是如何将用于C3P0工作:

// obviously, imports should go where there should go 
import java.util.Properties; 
import com.mchange.v2.c3p0.ComboPooledDataSource; 

// this is very close to the postgres docs 
Properties props = new Properties(); 
props.setProperty("user", myUsername); 
props.setProperties("password", myPassword); 
props.setProperty("ssl","true"); 
props.setProperty("sslfactory","org.postgresql.ssl.NonValidatingFactory"); 

// this is c3p0-specific 
ComboPooledDataSource cpds = new ComboPooledDataSource(); 
cpds.setJdbcUrl("jdbc:postgresql://myhost.mydomain/mydb"); 
cpds.setProperties(props); 
// set any other properties you wish to override from values in config and/or defaults 

最简单的方法,我认为,将是刚刚成立JDBCURL,用户,和C3P0配置文件的密码和附加SSL PARAMS到你的Postgres JDBC URL的末尾。

+0

谢谢你的回答史蒂夫!我正在使用Tomcat JNDI资源来配置数据库池。正如你所说,1)设置PGSQL接受SSL连接,2)对于Tomcat JNDI池,JDBC驱动器支持SSL,所以我可以简单地修改URL属性以使用SSL。3)对于c3p0,在初始化期间添加两个属性启用S​​SL。我对么? –

+0

没有。你可以添加URL属性。 c3p0也使用JDBC驱动程序。在配置资源的地方配置用户和密码,将其余的添加为URL属性。 –