使用ssl双向验证登录mysql

1. 检查服务端是否开启ssl认证

show variables like '%ssl%';


 

2. 确认用户强制使用ssl认证

use mysql;
#username换成具体的用户
select ssl_type from user where user='username' and host='%';
ALTER USER 'username'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;

3. 生成客户端证书

1. 找服务端提供三个原始文件

2. 生成相应密钥文件并导入jdk

# 生成truststore文件,使用密码password123
keytool -importcert -alias Cacert -file ca.pem  -keystore truststoremysql -storepass password123
# windows下没有openssl,可以找一台linux服务器执行第二个命令生成中间文件client-keystore.p12  使用密码password456,注意这个密码要跟第三部使用的密码一致,不然会出现密码不验证的问题
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:password456 -out client-keystore.p12
# 回到目标服务器执行第三个命令生成keystore文件,使用密码password456
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass password456 -destkeystore keystoremysql -deststoretype JKS -deststorepass password456

3. 修改jdbc连接字符串

public class JDBCMySQL {

    public static void main(String[] args) {
        Connection connection = null;
        String urlWithCe = "jdbc:mysql://192.168.1.2:3306/mysql?"
                + "useSSL=true"
                + "&verifyServerCertificate=true"
                + "&requireSSL=true"
                + "&trustCertificateKeyStoreUrl=file:E:\\truststoremysql"
                + "&trustCertificateKeyStorePassword=password123"
                + "&clientCertificateKeyStoreUrl=file:E:\\keystoremysql"
                + "&clientCertificateKeyStorePassword=password456";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection(urlWithCe,
                    "test", "123456");
            PreparedStatement preparedStatement = connection.prepareStatement("select * from " +
                    "acac");
            System.out.println(preparedStatement.executeQuery().first());
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

4. 注意事项

  1. 执行第二个命令使用的密码要和第三个命令使用的密码保持相同,不然连接Mysql的时候会提示密码不正确一类的。
  2. 执行第三个命令需要先执行第一个命令,不然也会报错密码不正确一类。
  3. 连接选项clientCertificateKeyStoreUrl和trustCertificateKeyStoreUrl默认是使用url,可以选择本地文件file:,也可以使用resource文件classpath:

详细参考

链接icon-default.png?t=N2N8https://blog.csdn.net/weixin_42911645/article/details/127070812

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值