2012-12-20 16 views
13

Tôi hiện đang tạo kết nối với cơ sở dữ liệu của mình mà không cần sử dụng SSL. Bây giờ tôi muốn sử dụng SSL. Cách tôi đã thiết lập nó, là nguồn cơ sở dữ liệu của tôi là trong cấu hình.SSL sử dụng Java để kết nối cơ sở dữ liệu

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

tôi có thể nhận được kết nối SSL để làm việc bằng cách gọi chương trình của tôi với các đối số sau

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

Tôi cũng có thể lấy nó để làm việc bằng cách thay đổi các biến env trong mã bản thân

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

Tuy nhiên, mục tiêu của tôi là tạo kết nối SSL mà không thực hiện bất kỳ thay đổi nào đối với mã của tôi và không phải thay đổi các đối số VM tôi sử dụng. Có cách nào tôi có thể đặt nguồn của mình để bao gồm thông tin này không?

Cái gì như:

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

Tôi cố gắng này chính xác và nó không hoạt động, lý tưởng tôi chỉ có thể thêm các thông tin để cấu hình tôi đã có vì vậy mà tôi không cần phải thực hiện thay đổi trong hơn hơn một nơi. Bất kỳ ý tưởng?

Trả lời

3

Đề xuất 1: đặt cửa hàng tin cậy của bạn thay vì cửa hàng tin cậy của java, hoặc nhập chứng chỉ của bạn vào cửa hàng tin cậy của java: ${java.home}/lib/security/cacerts

Đề xuất 2: Viết tài xế riêng của bạn mở rộng com.mysql.jdbc.Driver. Đặt cấu hình SSL vào mã mới. Mặc dù bạn cần phải viết mã, nhưng không phải trong ứng dụng chính. Không chắc chắn nếu nó có thể chấp nhận được cho bạn.

+0

Về số 1, chỉ bao gồm vị trí của cửa hàng tin cậy, tôi vẫn cần đối số VM để đặt mật khẩu, không? – Marianna

+0

Nếu bạn nhập chứng chỉ vào kho lưu trữ tin cậy mặc định của java, bạn không cần phải đặt mật khẩu. Đó là 'thay đổi' :) – Tarlog

0

Theo phần bảo mật của MySQLConnector documentation, trustCertificateKeyStoreUrl lấy làm đầu vào URL.

Tức là, bạn phải thêm tiền tố vào file: để làm cho nó hoạt động cho các tệp cục bộ. Nói cách khác, bạn cần đặt đường dẫn đến truststore của mình là file:path\to\truststore.

Điều tương tự cũng xảy ra với clientCertificateKeyStoreUrl, nếu bạn đang sử dụng thông số đó.

Các vấn đề liên quan