环境:
OS:windows2012(mysql服务器)
mysql:5.7.29
jdk:1.8
说明:
mysql5.7版本安装会自动生成如下的证书文件(可以用不自己再生成ca文件):
ca.pem
client-cert.pem
client-key.pem
同时mysql是默认开启了ssl了的
keytool只使用到ca.pem文件,但是navicate工具这三个文件都会用到.
1.进入到ca.pem的目录(将mysql服务器生成的文件根据自己情况下载到相应的目录)
C:\Users\Administrator>cd c:/ c:\>cd win2012_mysql_ca c:\win2012_mysql_ca>dir 驱动器 C 中的卷是 OS 卷的序列号是 8AB0-84EC c:\win2012_mysql_ca 的目录 2023/10/30 15:38 <DIR> . 2023/10/30 15:38 <DIR> .. 2023/10/30 10:07 1,707 ca-key.pem 2023/10/30 10:07 1,131 ca.pem 2023/10/30 10:07 1,131 client-cert.pem 2023/10/30 10:07 1,703 client-key.
2.生成证书(前提需要安装好jdk,keytool是jdk自带的)
c:\win2012_mysql_ca>keytool -importcert -alias MySQLCACert -file ca.pem -keystore truststore -storepass 123456 所有者: CN=MySQL_Server_5.7.29_Auto_Generated_CA_Certificate 发布者: CN=MySQL_Server_5.7.29_Auto_Generated_CA_Certificate 序列号: 1 有效期为 Mon Oct 30 10:07:33 CST 2023 至 Thu Oct 27 10:07:33 CST 2033 证书指纹: MD5: 41:B2:EC:07:5A:9C:99:54:5D:43:99:BE:93:F1:19:78 SHA1: 32:60:1C:73:FB:1F:A7:06:D5:1C:57:B9:F7:39:94:DE:8D:C6:46:23 SHA256: E9:F9:AF:68:42:8A:7B:13:F2:E3:8E:36:60:19:2F:DE:EB:E5:90:62:5F:FC:7B:4E:94:50:47:74:61:58:B2:4A 签名算法名称: SHA256withRSA 主体公共密钥算法: 2048 位 RSA 密钥 版本: 3 扩展: #1: ObjectId: 2.5.29.19 Criticality=true BasicConstraints:[ CA:true PathLen:2147483647 ] 是否信任此证书? [否]: y 证书已添加到密钥库中
这里设置的密码是123456,后面的jdbc连接需要用到这个密码
3.这个时候会生成一个文件truststore
c:\win2012_mysql_ca>dir 驱动器 C 中的卷是 OS 卷的序列号是 8AB0-84EC c:\win2012_mysql_ca 的目录 2023/10/30 15:38 <DIR> . 2023/10/30 15:38 <DIR> .. 2023/10/30 10:07 1,707 ca-key.pem 2023/10/30 10:07 1,131 ca.pem 2023/10/30 10:07 1,131 client-cert.pem 2023/10/30 10:07 1,703 client-key.pem 2023/10/30 15:38 846 truststore 5 个文件 6,518 字节 2 个目录 11,266,293,760 可用字节
若想修改密码,可以删除该文件使用新的密码重新执行keytool重新生成。
4.成之后可以查看一下是否生成成功,操作命令
c:\win2012_mysql_ca>keytool -list -keystore truststore 输入密钥库口令: ##这里输入123456 密钥库类型: jks 密钥库提供方: SUN 您的密钥库包含 1 个条目 mysqlcacert, 2023-10-30, trustedCertEntry, 证书指纹 (SHA1): 32:60:1C:73:FB:1F:A7:06:D5:1C:57:B9:F7:39:94:DE:8D:C6:46:23
5.java数据库连接
datasource.masterUrl=jdbc:mysql://192.168.1.105:3306/db_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&verifyServerCertificate=true&requireSSL=true&sslMode=verify_ca&trustCertificateKeyStoreUrl=file:C:/win2012_mysql_ca/truststore&trustCertificateKeyStorePassword=123456
完整的代码如下:
package ssltest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class mytest { Connection con; public static String user; public static String password; public void getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("数据库驱动加载成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); } user = "ssltest"; password = "mysql"; // 填自己的密码 try { //con = DriverManager.getConnection("jdbc:mysql://192.168.1.105:13306/db_test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=true", user, password); con = DriverManager.getConnection("jdbc:mysql://192.168.1.105:13306/db_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&verifyServerCertificate=true&requireSSL=true&sslMode=verify_ca&trustCertificateKeyStoreUrl=file:C:/win2012_mysql_ca/truststore&trustCertificateKeyStorePassword=123456", user, password); System.out.println("数据库连接成功"); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { mytest c = new mytest(); c.getConnection(); } }
说明:我这里用到的mysql驱动是5.1.49版本
标签:10,java,windows,ca,30,ssl,2023,mysql,true From: https://www.cnblogs.com/hxlasky/p/17798165.html