使用BasicDataSource

时间:2017-11-26 05:16:21

标签: java mysql jdbc datasource

我正在尝试使用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服务器。

1 个答案:

答案 0 :(得分:0)

您可以在信任库中添加服务器的证书,但首先使用keytool命令检查它是否已经存在。 如果它仍然无法正常工作,请使用debug属性(-Djavax.net.debug = all),然后我们将检查输出中您正在使用的信任库以及交换的证书。