具有SSL授权证书的Java MySQL连接

时间:2016-10-05 02:06:19

标签: java mysql ssl jdbc

我正在尝试使用Java Rest WebServiceJDBC进行连接。

首先,我使用MySQL Workbench成功连接了用户名和密码以及一个额外的细节,我需要添加一个“SSL的证书颁发机构文件的路径”并且工作,我能够连接和使用。我有证书可以使用数据库远程。

现在我正在尝试使用Java进行连接,这就是我尝试的方式:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConexaoBD {
    // Define o Metodo de Conexao quando a classe � chamada
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    public Connection obtemConexao() throws SQLException {
        System.getProperties().setProperty("javax.net.ssl.trustStore","/mysqlcertificate.pem");
        return DriverManager.getConnection("jdbc:mysql://myHost", "myUsername", "myPassword");                                  
    }
}

我研究了把URL中的useSSL = true但是没有用,或者这个system.getproperties,我也在项目包和我的课程包中找到.pem文件(因为我不喜欢)知道我需要放置文件的地方是什么。)

我应该怎么做才能连接?没有这个SSL,数据库拒绝我的连接,我试图以这种方式连接另一个类:

Connection conn = null;
Statement stm = null;
try {
    ConexaoBD bd = new ConexaoBD();
    conn = bd.obtemConexao();

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我的情况类似,但不一样。我可以从工作台连接到MySQL,但不能从我的代码连接到MySQL。在工作台中选择的唯一选项是useSSL(如果可用)。 在这种情况下,下面的代码对我有用。

private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");

private void connectToDb() throws Exception {
    String jdbcDriver = "com.mysql.jdbc.Driver";
    String dbUrl = "jdbc:mysql://" + db_server +
        "?verifyServerCertificate=false" +
        "&useSSL=true" +
        "&requireSSL=true";
    System.setProperty(jdbcDriver, "");
    Class.forName(jdbcDriver).newInstance();

    Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
    Statement statement = conn.createStatement();
}