当前位置:   article > 正文

JDBC连接MySQL8 SSL

JDBC连接MySQL8 SSL

CREATE USER 'dev001'@'%' IDENTIFIED BY 'FxhyDbDev@CqsZxHjz147'  require X509;
GRANT ALL PRIVILEGES ON fxhy_test.* TO 'dev001'@'%';
FLUSH PRIVILEGES;

1.创建用户并指定ssl连接

grant all on . to 'test'@'%' identified by 'imooc require SSL(X509);


2.查看是否使用ssl

SELECT ssl_type From mysql.user Where user="test"

3.配置用户必须使用ssl

ALTER USER 'test'@'%' REQUIRE SSL(X509);
FLUSH PRIVILEGES;
注意:%号位置可以更换为连接数据库的ip


4.取消用户使用ssl连接

update user set ssl_type='' where user='test';
FLUSH PRIVILEGES;

5.证证书是否导入

keytool -list -keystore truststore.jks

6.数据库 datadir 目录下

文件名    说明
ca-key.pem    CA私钥
ca.pem    自签的CA证书,客户端连接也需要提供
client-cert.pem    客户端连接服务器端需要提供的证书文件
client-key.pem    客户端连接服务器端需要提供的私钥文件
private_key.pem    私钥/公钥对的私有成员
public_key.pem    私钥/公钥对的共有成员
server-cert.pem    服务器端证书文件
server-key.pem    服务器端私钥文件

7、查看是否开启SSL

8、确认当前连接启用SSL

9、当前用户

10、bin/mysql SSL方式连接

mysql --ssl-ca=E:\\installprograms\\zhuomian\\SSL\\ca.pem --ssl_cert=E:\\installprograms\\zhuomian\\SSL\\client-cert.pem --ssl-key=E:\\installprograms\\zhuomian\\SSL\\client-key.pem -utest -P13306 -h192.168.0.103 -p

11、强制使用SSL连接

[mysqld]

#require_secure_transport = ON

12、查询用户状态

select user,host,ssl_type,ssl_cipher,x509_issuer,x509_subject from mysql.user;

13、 show status like 'ssl_cipher';

设置服务器身份验证:导入服务器证书
keytool -importcert -alias MySQLCACert -file ca.pem -keystore truststore.jks -storepass 123456

设置客户端身份验证:
将客户端密钥和证书文件转换为 PKCS #12 存档:(在数据库服务器生成)
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:123456 -out client-keystore.p12

将客户端密钥和证书导入 Java 密钥库:
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore keystore.jks -deststoretype JKS -deststorepass 123456

demo:

  1. package org.example;
  2. /**
  3. * @ClassName StandardJDBCSample
  4. * @Description TODO
  5. * @Author tangzongyun
  6. * @Date 2024/5/1 17:06
  7. * @Version 1.0
  8. **/
  9. //mysql使用ssl方式jdbc连接数据库
  10. import java.sql.Connection;
  11. import java.sql.DriverManager;
  12. import java.sql.ResultSet;
  13. import java.sql.Statement;
  14. /**
  15. * 标准JDBC操作五步骤
  16. */
  17. public class StandardJDBCSample {
  18. public static void main(String[] args) {
  19. Connection conn = null;
  20. try {
  21. //1. 加载并注册JDBC驱动
  22. Class.forName("com.mysql.cj.jdbc.Driver");
  23. //2. 创建数据库连接
  24. String url = "";
  25. url = "jdbc:mysql://192.168.0.103:13306/mysql?"
  26. + "useSSL=true"
  27. + "&verifyServerCertificate=true"
  28. + "&requireSSL=true"
  29. + "&trustCertificateKeyStoreUrl=file:E:\\installprograms\\zhuomian\\SSL\\truststore.jks"
  30. + "&trustCertificateKeyStorePassword=123456"
  31. + "&clientCertificateKeyStoreUrl=file:E:\\installprograms\\zhuomian\\SSL\\keystore.jks"
  32. + "&clientCertificateKeyStorePassword=123456";
  33. conn = DriverManager.getConnection(url
  34. ,
  35. "test", "1qaz@WSX"
  36. );
  37. //3. 创建Statement对象
  38. Statement stmt = conn.createStatement();
  39. ResultSet rs = stmt.executeQuery("select * from user");
  40. //4. 遍历查询结果
  41. while (rs.next()) {
  42. //Integer eno = rs.getInt(1); //eno
  43. String ename = rs.getString("host");
  44. String user = rs.getString("user");
  45. String ssl_type = rs.getString("ssl_type");
  46. System.out.println(ename + "-" + user + "-" + ename + "-" + ssl_type);
  47. }
  48. }catch(Exception e){
  49. e.printStackTrace();
  50. }finally {
  51. try {
  52. if (conn != null && conn.isClosed() == false) {
  53. //5. 关闭连接,释放资源
  54. conn.close();
  55. }
  56. }catch(Exception ex){
  57. ex.printStackTrace();
  58. }
  59. }
  60. }
  61. }

参考文件:https://www.cnblogs.com/plluoye/p/11182945.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/550486
推荐阅读
相关标签
  

闽ICP备14008679号