我正在尝试使用SSL在我的应用程序中保护MySQL连接。我现在的相关代码:
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUsername(connectorConfig.getUser());
dataSource.setPassword(connectorConfig.getPassword());
String uri = connectorConfig.getConnectURI();
dataSource.setUrl(uri);
dataSource.setValidationQuery(getValidationQuery());
dataSource.setTestOnBorrow(true);
datasource.setDriverClassLoader(getClass().getClassLoader());
datasource.setDriverClassName("com.mysql.jdbc.Driver");
System.setProperty("javax.net.ssl.keyStore", "/Users/xx/xx/client.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "xx");
System.setProperty("javax.net.ssl.trustStore", "/Users/xx/xx/server.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "xx");
final DBI dbi = new DBI(datasource);
我正在使用DBCP2 BasicDataSource进行数据源管理,使用JDBI来执行查询。 但是,上面的代码不起作用,因为我在尝试建立与mysql服务器的连接时收到以下错误:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
在这种情况下,如何考虑如何向MySQL服务器提供SSL上下文参数?
PS:我相信我的SSL配置是正确的,因为我可以使用命令行中的客户端密钥库连接到MySQL服务器。
答案 0 :(得分:0)
您可以在信任库中添加服务器的证书,但首先使用keytool命令检查它是否已经存在。 如果它仍然无法正常工作,请使用debug属性(-Djavax.net.debug = all),然后我们将检查输出中您正在使用的信任库以及交换的证书。