2012-12-20 14 views
13

Obecnie nawiązuję połączenie z moją bazą danych bez użycia protokołu SSL. Chciałbym teraz wykorzystać SSL. Sposób, w jaki go skonfigurowałem, to moje źródło bazy danych jest w konfiguracji.Używanie protokołu Java do połączenia z bazą danych w języku Java

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

mogę uzyskać połączenia SSL pracować nazywając mój program z następującymi argumentami

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

mogę także zmusić go do pracy przez zmianę zmiennych env w kodzie samej

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

Jednak moim celem jest nawiązanie połączenia SSL bez wprowadzania żadnych zmian w moim kodzie i bez konieczności zmieniania argumentów VM, których używam. Czy istnieje sposób, w jaki mogę ustawić moje źródło, aby zawierał te informacje?

Coś jak:

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

Próbowałem to dokładnie i to nie działa, najlepiej mogę tylko dodać informacje do config mam już tak, że nie trzeba wprowadzać zmian w bardziej niż jedno miejsce. Jakieś pomysły?

Odpowiedz

3

Propozycja 1: umieścić swój sklep zaufania zamiast magazynu zaufanych Java, albo zaimportować certyfikat do magazynu zaufanych Java: ${java.home}/lib/security/cacerts

Sugestia 2: napisać własny sterownik rozciągającej com.mysql.jdbc.Driver. Umieść konfigurację SSL w nowym kodzie. Chociaż musisz kodować, ale nie w głównej aplikacji. Nie jestem pewien, czy jest to dla ciebie do przyjęcia.

+0

Jeśli chodzi o # 1, który obejmuje tylko lokalizację magazynu zaufanych certyfikatów, nadal potrzebowałbym argumentu VM do ustawienia hasła, nie? – Marianna

+0

Po zaimportowaniu certyfikatów do domyślnego magazynu zaufanych java, nie trzeba ustawiać hasła. To "zmiana" :) – Tarlog

0

Zgodnie z sekcją zabezpieczeń MySQLConnector documentation, trustCertificateKeyStoreUrl jako adres wejściowy przyjmuje adres URL.

Oznacza to, że należy poprzedzić go numerem file:, aby działał z plikami lokalnymi. Innymi słowy, musisz ustawić ścieżkę do magazynu zaufanych certyfikatów jako file:path\to\truststore.

To samo dotyczy clientCertificateKeyStoreUrl, jeśli używasz tego parametru.