无法使用SunCertPathBuilderException连接到MySQL数据库

时间:2018-06-05 10:17:08

标签: java mysql exception ssl-certificate

我正在尝试连接MySQL数据库:

       static final String URL="jdbc:mysql://localhost:3306/demo_hotels?useSSL=true&autoReconnect=true&serverTimezone=UTC";
       static final String USERNAME="demo";
       static final String PASSWORD="demo";

        public static void main(String[] args) {
         try {
          DriverManager.registerDriver(new FabricMySQLDriver());
          connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);

          Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new
                JdbcConnection(connection));
          Liquibase liquibase = new liquibase.Liquibase("db/db.changelog.xml",
                new ClassLoaderResourceAccessor(), database);

          liquibase.update(new Contexts(), new LabelExpression());
          database.close();

         } catch (SQLException | LiquibaseException e) {
          e.printStackTrace();
         }

这很有效。但现在我试图在另一台机器上执行此代码并且它无法正常工作:

    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
   at com.pazukdev.auxiliary_services.DBService.main(DBService.java:69)
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)

为什么停止工作?

旧机器:java版本1.8.0_112,Windows 7,MySQL Server 5.7.21

新机器:java版本1.8.0_172,Windows 10,MySQL Server 8.0.11

我找到了一些关于此类异常的信息。看起来我有一些SSL证书的三重奏:Accept server's self-signed ssl certificate in Java client

但是TrustManager的选项2不起作用 - 我有相同的例外。 我试着输入cmd:

<JAVA_HOME>\bin\keytool -import -v -trustcacerts
-alias server-alias -file server.cer
-keystore cacerts.jks -keypass changeit
-storepass changeit

但是我也没有这个选项1的影响。

也许我做错了什么..

2 个答案:

答案 0 :(得分:0)

我不是Java开发人员,但我在这里有一些疑问和问题。

  1. 如果你使用本地数据库,你真的需要?useSSL=true吗?
  2. cmd执行的结果是什么?您是否已正确导出server.cer文件对应于您的本地主机?有必要的keypass和storepass吗?

答案 1 :(得分:0)

我遇到了数据库和连接的全局问题。这是由于现在我在其最新版本中安装了所有MySQL的东西。在我的旧机器上,我有该软件的旧版本。所以,我甚至尝试在新软件中执行一些旧的MySQL查询。

我在旧机器上安装了相同版本的MySQL Server和Connector / ODBC(分别为5.7.21和5.3.10),并且连接工作正常。