2012-12-20 86 views
13

我目前正在與我的數據庫進行連接而不使用SSL。我現在想要使用SSL。我有它的方式設置,是我的數據庫源配置。Java將SSL用於數據庫連接

DB_SOURCE=jdbc:mysql://myDatabaseInfo:3306/DB_NAME? 
DB_USER=dbUser 
DB_PW=dbPw 

我可以得到SSL連接通過調用我的程序使用以下參數

-Djavax.net.ssl.trustStore=path\to\truststore 
-Djavax.net.ssl.trustStorePassword=myPassword 

我也可以得到它通過在代碼本身

dbSource += "?useSSL=true"; 
System.setProperty("javax.net.ssl.trustStore", "path\to\truststore"); 
System.setProperty("javax.net.ssl.trustStorePassword", "myPassword"); 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection(dbSource, dbUser, dbPw); 
改變ENV變量工作工作

但是,我的目標是在不改變我的代碼的情況下進行SSL連接,而無需更改我使用的VM參數。有沒有辦法讓我的源代碼包含這些信息?

喜歡的東西:

jdbc:mysql://myDatabaseInfo:3306/DB_NAME?useSSL=true&trustCertificateKeyStoreUrl=path\to\truststore&trustCertificateKeyStorePassword=myPassword 

我想這正是它不起作用,最好我可以只添加信息的配置我已經讓我沒有讓更多的變化比一個地方。有任何想法嗎?

回答

3

建議1:把你的信任庫,而不是Java的信任存儲的,或導入您的證書到Java信任存儲:${java.home}/lib/security/cacerts

建議2:寫自己的驅動器伸出com.mysql.jdbc.Driver。將SSL配置放入新代碼中。雖然您需要編寫代碼,但不在主應用程序中。不確定它是否可以接受。

+0

關於#1,只包括信任存儲的位置,我仍然需要VM參數來設置密碼,不是嗎? – Marianna

+0

如果將證書導入java的默認信任存儲庫,則不需要設置密碼。這是'changeit':) – Tarlog

0

根據MySQLConnector documentation的安全部分,trustCertificateKeyStoreUrl將URL作爲輸入。

也就是說,你必須用file:作爲前綴才能使它適用於本地文件。換句話說,您需要將您的信任庫的路徑設置爲file:path\to\truststore。如果您也使用該參數,則clientCertificateKeyStoreUrl也是如此。