【发布时间】:2023-03-09 14:35:02
【问题描述】:
我正在尝试使用 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 服务器。
【问题讨论】:
标签: java mysql jdbc datasource