2012-12-20 9 views
13

Ich mache gerade eine Verbindung zu meiner Datenbank, ohne SSL zu verwenden. Ich möchte jetzt SSL nutzen. So wie ich es eingerichtet habe, ist meine Datenbankquelle in Config.Java verwendet SSL für Datenbankverbindung

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

Ich kann die SSL-Verbindung erhalten, indem Aufruf mein Programm mit den folgenden Argumenten zu arbeiten

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

ich es auch durch Änderung der env Variablen im Code selbst

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); 
arbeiten kann

Mein Ziel ist es jedoch, die SSL-Verbindung ohne Änderungen an meinem Code und ohne die VM-Argumente, die ich verwende, zu ändern. Gibt es eine Möglichkeit, meine Quelle so einzustellen, dass sie diese Informationen enthält?

Etwas wie:

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

habe ich versucht, das genau und es funktioniert nicht, im Idealfall konnte ich nur hinzufügen, die Informationen zu dem Config Ich habe schon so, dass ich, um Änderungen vorzunehmen nicht mehr als ein Ort. Irgendwelche Ideen?

Antwort

3

Vorschlag 1: setzen Sie Ihr Vertrauen speichern, anstatt das Vertrauen Store java, oder Ihr Zertifikat in den Trust Store Java importieren: ${java.home}/lib/security/cacerts

Vorschlag 2: Ihren eigenen Treiber com.mysql.jdbc.Driver erstreckt schreiben. Fügen Sie die SSL-Konfiguration in den neuen Code ein. Sie müssen zwar programmieren, aber nicht in der Hauptanwendung. Nicht sicher, ob es für dich akzeptabel ist.

+0

In Bezug auf # 1, die nur den Speicherort des Trust Store abdeckt, würde ich immer noch das VM-Argument benötigen, um das Passwort zu setzen, nein? – Marianna

+0

Wenn Sie die Zertifikate in den standardmäßigen Trust Store von Java importieren, müssen Sie das Kennwort nicht festlegen. Es ist "changeit" :) – Tarlog

0

Gemäß dem Sicherheitsabschnitt der MySQLConnector documentation, die trustCertificateKeyStoreUrl nimmt als Eingabe eine URL.

Das heißt, Sie müssen ihm file: voranstellen, damit es für lokale Dateien funktioniert. Mit anderen Worten, Sie müssen den Pfad zu Ihrem Truststore als file:path\to\truststore festlegen. Das gleiche gilt für clientCertificateKeyStoreUrl, wenn Sie auch diesen Parameter verwenden.