2013-12-17 4 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

예, DB 쪽에서이 사용자는 SSL을 통해 연결하고 유효한 인증서를 사용해야합니다. 유효한 인증서를 제공하는 Toad에서이 사용자 및 암호를 사용할 때 사용자는 연결할 수 있습니다. 그러나 질문에 위의 프로그램과 함께, 그것은 작동하지 않습니다! 어떤 아이디어? – Nav

+0

스택 추적에서 '암호 사용'이 거부되었습니다. 그것이 인증서/SSL 문제라면 그것은 상당히 다른 것을 말했을 것입니다. 내가 생각하는대로 MySQL을 구성했다고 생각하지 않습니다. – EJP

+0

예 @EJP 당신이 맞습니다. – Nav

관련 문제