2014-04-14 130 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屬性。 –