我目前正在连接数据库而不使用SSL。我现在想使用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
我也可以通过更改代码本身的env变量来实现它
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);
但是,我的目标是在不对代码进行任何更改的情况下建立SSL连接,而无需更改我使用的VM参数。有没有办法设置我的来源以包含这些信息?
类似的东西:
jdbc:mysql://myDatabaseInfo:3306/DB_NAME?useSSL=true&trustCertificateKeyStoreUrl=path\to\truststore&trustCertificateKeyStorePassword=myPassword
我完全尝试了这个并且它不起作用,理想情况下我可以将信息添加到我已经拥有的配置中,这样我就不必在多个地方进行更改。有什么想法吗?
答案 0 :(得分:3)
建议1:放置您的信任存储而不是java的信任存储,或将您的证书导入java的信任存储:${java.home}/lib/security/cacerts
建议2:编写自己的com.mysql.jdbc.Driver
扩展驱动程序。将SSL配置放入新代码中。虽然您需要编码,但不在主应用程序中。不确定它是否适合你。
答案 1 :(得分:0)
根据MySQLConnector documentation的安全部分,trustCertificateKeyStoreUrl
将URL作为输入。
也就是说,您必须在其前面添加file:
,以使其适用于本地文件。换句话说,您需要将信任库的路径设置为file:path\to\truststore
。
clientCertificateKeyStoreUrl
也是如此,如果您也使用该参数。