2013-12-17 90 views
-1

我想通过SSL获取与mysql的JDBC连接。 我已经将有效证书导入cacertsSSL.jks文件。 我仍然无法连接。JDBC连接:访问被拒绝

有没有扩展或改变驱动程序的出路?

public static void getMysqlConnection() { 
    Connection connection = null; 
    try { 

     Class.forName("com.mysql.jdbc.Driver"); 
     Driver driver = DriverManager.getDriver(URL); 
     DriverPropertyInfo[] info = driver.getPropertyInfo(URL, null); 

     String URL = "jdbc:mysql://myHost:3307/myDB?verifyServerCertificate=false&requireSSL=true&useSSL=true"; 
     String USER = "myUser"; 
     String PASSWORD = "myPwd"; 

     System.setProperty("javax.net.ssl.keyStore", "C:\\Development\\cacertsSSL.jks"); 
     System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); 
     System.setProperty("javax.net.ssl.trustStore", "C:\\Development\\cacertsSSL.jks"); 
     System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

     Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); 
     System.out.println(conn); 
    } catch (Exception e) { 
     System.out.println("Connection Failed! Check output console"); 
     e.printStackTrace(); 
     return; 
    } 
    } 

下面是连接错误堆栈跟踪

java.sql.SQLException: Access denied for user 'myuser'@'myHost' (using password: YES) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910) 
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923) 
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) 
at java.sql.DriverManager.getConnection(DriverManager.java:582) 
at java.sql.DriverManager.getConnection(DriverManager.java:154) 
at com.test.Test1.getMysqlConnection(Test1.java:152) 
at com.test.Test1.main(Test1.java:25) 

答: 这里是使工作:

String URL = "jdbc:mysql://myHost:3307/myDB?useSSL=true"; 
    String USER = "myUser"; 
    String PASSWORD = "myPwd"; 

    System.setProperty("javax.net.ssl.trustStore", "C:\\Development\\cacertsSSL.jks"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

只有信任库足以在这种情况下,只有useSSL工作过我案件。 谢谢。

回答

2

您的用户名或密码错误,或者您无法以该用户身份从该主机连接。但是这也表明SSL部分正常工作。

+0

是在数据库方面,此用户需要通过SSL和有效证书进行连接。当我在Toad中使用此用户&pwd提供有效证书时,用户可以连接。但是通过上面的问题程序,它不起作用!任何想法? – Nav

+0

堆栈跟踪表示访问被拒绝'使用密码'。如果这是一个证书/ SSL问题,它会说一些完全不同的东西。我认为你没有按照你的想法配置MySQL。 – EJP

+0

是@EJP你是对的。 – Nav