【问题标题】:Secure connection to mysql with SSL using BasicDataSource使用 BasicDataSource 通过 SSL 安全连接到 mysql
【发布时间】: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


    【解决方案1】:

    发现System.setProperty 不是在我的用例中提供参数的正确方法。将BasicDataSourceMysqlDataSource 切换,这提供了一种使用setClientCertificateXX()setTrustCertificateXX() 方法指定密钥库参数的方法,它现在似乎可以工作了。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • server.jks 已经拥有服务器证书。使用调试模式,我可以看到它忽略了代码中指定的信任库,而是在此路径中查找:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/security/cacerts
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2020-03-02
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2011-04-22
      相关资源
      最近更新 更多