如何在Java中使用SSL证书连接MySQL数据库

如何在Java中使用SSL证书连接MySQL数据库,java,mysql,ssl,Java,Mysql,Ssl,我有三个文件privatekey、cert和CAcert,我需要创建一个密钥库来连接到需要SSL连接的mysql数据库。到目前为止,我的步骤是: # Create PKCS12 keystore from private key and public certificate and CA like this. sudo openssl pkcs12 -export -name mycerts -out mycerts.pfx -inkey domain.com.key -in comain.co

我有三个文件privatekey、cert和CAcert,我需要创建一个密钥库来连接到需要SSL连接的mysql数据库。到目前为止,我的步骤是:

# Create PKCS12 keystore from private key and public certificate and CA like this.
sudo openssl pkcs12 -export -name mycerts -out mycerts.pfx -inkey domain.com.key -in comain.com.crt -certfile domain.com.cabundle

# Convert PKCS12 keystore into a JKS keystore
sudo keytool -importkeystore -destkeystore mykeystore.jks -srckeystore mycerts.pfx -srcstoretype PKCS12 -alias mycerts -deststorepass changeit -destkeypass changeit -srcstorepass changeit
一切似乎都很好,我的应用程序根文件夹中有一个mykeystore.jks文件。在这一点上,我试图联系:

public class TestConnection {

    public static void main(String[] args) {
        System.setProperty("javax.net.ssl.keyStore", "mykeystore.jks");
        System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

        Connection con = null;
        try {
            String url = "jdbc:mysql://remoteIP:3306/my_db"
                + "?verifyServerCertificate=true"
                + "&useSSL=true"
                + "&requireSSL=true";
            String user = "user";
            String password = "pwd";

            Class dbDriver = Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(url, user, password);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (con != null) {
                try {
                    con.close();
                } catch (Exception e) {
                    e.printstacktrace();
                }
            }
        }
    }
}
但我有一个例外:

java.sql.SQLException: null,  message from server: "Host '93-45-149-182.ip102.fastwebnet.it' is not allowed to connect to this MySQL server"
t com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1112)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at ekovianetworkexplorer.TestConnection.main(TestConnection.java:28)

我的设置中是否缺少任何内容?提前感谢。

您需要先授予访问权限:谢谢Alex,我正在收到db管理员的证书,所以我想他已经这样做了。。。但我会仔细检查,然后这是你的下一步:你有什么例外?您是否尝试从控制台mysql客户端进行连接?只是按照说明创建了一个密钥库和信任库,但我仍然有问题中提到的SQLException。。。我还没有尝试从控制台mysql客户端连接。。。