【发布时间】:2015-09-05 16:08:37
【问题描述】:
我一直在尝试连接到使用ssl与java连接的MySql数据库并且遇到问题,如果有人可以帮助我将有很大的帮助。
手动连接到 MySql:
我们使用 MySQL Workbench,参数 - 主机名 - "test-db1-ro-xxxxxx.net" ,端口 - 3306 ,用户名,密码。 有一个SSL CA文件——mysql-ssl-ca-cert.pem,手动连接成功。
我在java中尝试过同样的方法(在windows系统中) 我的代码:
String url = "jdbc:mysql://test-db1-ro.apdev.XXXXXX.net:3306/database";
String driver = "com.mysql.jdbc.Driver";
String userName = "XXXXXXXX";
String password = "XXXXXXXX";
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection(url,userName,password);
当我运行代码时,我收到“拒绝访问”错误 我认为这是由于 SSL 连接。
在这种情况下,我不知道如何使用 .pem 文件与数据库建立安全连接。
有人可以帮忙吗,做过各种各样的事情,但总是遇到相同的访问被拒绝错误。
完整堆栈跟踪:
java.sql.SQLException: Access denied for user 'xxxxxxxx' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:885)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3421)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1247)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at TestDBConnection.main(TestDBConnection.java:34)
【问题讨论】:
-
你可以从阅读这个dev.mysql.com/doc/connector-j/en/…开始
-
使用 .pem 文件创建了一个密钥库,然后如下更改了我的代码,但仍然出现问题。你能想到别的吗?字符串 url = "jdbc:mysql://test-db1-ro.apdev.XXXXX.net:3306/database" + "&useSSL=true" + "&requireSSL=true" ; System.setProperty("javax.net.ssl.keyStore","path"); System.setProperty("javax.net.ssl.keyStorePassword","password");
-
您能否提供完整的堆栈跟踪,或者“访问被拒绝”来自的任何错误消息?