Tomcat连接池上的SSL

时间:2014-04-14 18:48:35

标签: ssl tomcat7 connection-pooling postgresql-9.1 c3p0

我做了很多搜索,但仍无法找到解决方案。

在我的项目中,我使用Tomcat连接池和用于postgresql的C3P0连接池。我拒绝使用JDBC连接池,因为postgresql没有正式建议它。

现在我需要在这些池上启用SSL / TLS。我认为这应该是一个非常普遍的需求。我在JDBC池中找到了示例,但没有找到tomcat或c3p0的示例。我真的想知道tomcat和c3p0池是否可以配置SSL!

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

1 个答案:

答案 0 :(得分: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 URL:

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

我认为,最简单的方法是在c3p0配置文件中设置jdbcUrl,用户和密码,并将ssl参数附加到postgres jdbc URL的末尾。