我做了很多搜索,但仍找不到解決方案。Tomcat連接池上的SSL
在我的項目中,我爲postgresql使用Tomcat連接池和C3P0連接池。我拒絕使用JDBC連接池,因爲它不是由postgresql正式提出的。
現在我需要在這些池上啓用SSL/TLS。我認爲這應該是一個相當普遍的需求。我在JDBC池中發現了一些例子,但不是用於tomcat或c3p0。我真的想知道,如果tomcat和c3p0 poolings可以配置SSL!
有人可以參考這個主題的任何資源嗎?
我做了很多搜索,但仍找不到解決方案。Tomcat連接池上的SSL
在我的項目中,我爲postgresql使用Tomcat連接池和C3P0連接池。我拒絕使用JDBC連接池,因爲它不是由postgresql正式提出的。
現在我需要在這些池上啓用SSL/TLS。我認爲這應該是一個相當普遍的需求。我在JDBC池中發現了一些例子,但不是用於tomcat或c3p0。我真的想知道,如果tomcat和c3p0 poolings可以配置SSL!
有人可以參考這個主題的任何資源嗎?
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的末尾。
謝謝你的回答史蒂夫!我正在使用Tomcat JNDI資源來配置數據庫池。正如你所說,1)設置PGSQL接受SSL連接,2)對於Tomcat JNDI池,JDBC驅動器支持SSL,所以我可以簡單地修改URL屬性以使用SSL。3)對於c3p0,在初始化期間添加兩個屬性啓用SSL。我對麼? –
沒有。你可以添加URL屬性。 c3p0也使用JDBC驅動程序。在配置資源的地方配置用戶和密碼,將其餘的添加爲URL屬性。 –