mysql连接加密

2023/10/31 ssl

# Msyql开启ssl连接

# 1、生成证书

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         #服务端私钥文件
1
2
3
4
5
6
7
8

# a、msyql5.7及以下

  • 安装openssl(查看一下一般都有安装)
  • 生成证书并设置权限
#一般放在mysql安装的data目录下
mysql_ssl_rsa_setup --datadir=/data/database/mysql
1
2

# b、msyql5.8则自带的在data目录下

#或者查看my.cnf中的datadir指向的目录
cat my.cnf
1
2

# 2、开启ssl配置

  • 编辑my.cnf
#编辑
vim my.cnf
1
2
  • my.cnf添加内容
#一般就在mysql的data目录下
ssl-ca=步骤1的证书目录/ca.pem
ssl-cert=步骤1的证书目录/client-cert.pem
ssl-key=步骤1的证书目录/client-key.pem
1
2
3
4

# 3、验证mysql是否开启ssl

#连接mysql,输入命令
show global variables like '%ssl%';
#have_openssl为YES,则是成功。
1
2
3

# 4、强制用户使用ssl连接

#修改用户使用ssl
alter user 'userName'@'%' require ssl;
#取消ssl验证
alter user 'userName'@'%' require none;
1
2
3
4

# 5、验证用户是否开启了ssl

#连接时携带--ssl-ca
bin/mysql -u userssl -p --socket=mysql.sock \--ssl-ca=步骤2的目录/ca.pem
1
2

#验证
status;
#查看SSL版本(mysql8和以下是不一样的)
show global variables like 'tls_version';
1
2
3
4

# 数据库管理工具连接

复制对应的三个文件到本地目录,管理工具配置连接

# JDBC连接

# 1、基于 ca.pem证书生成java客户端可识别的证书密码

#a、进入证书路径
#b、书生成java客户端可识别的证书密码(ssl是证书名,sslpwd是密码可以自己定义)
keytool -importcert -alias tmsMySQLCACert -file ca.pem -keystore ssl -storepass sslpwd
1
2
3

#注意 keytool 是jdk自带的,不是全局安装的需要自己进入到jdk的目录下或者建立软连接
ls -s /xxx/xxx/jdk1.8.0_231/bin/keytool /usr/local/bin/keytool
1
2

# 2、java客户端设置

把生成的ssl和密码配置在连接中:(trustCertificateKeyStoreUrl是证书的位置,可以把证书移到项目的config目录下)

#trustCertificateKeyStoreUrl是证书的位置,可以把证书移到项目的config目录下
#trustCertificateKeyStorePassword 生成证书时的密码
jdbc:mysql://localhost:3306/dataName?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&verifyServerCertificate=true&requireSSL=true&sslMode=verify_ca&trustCertificateKeyStoreUrl=file:/ssl&trustCertificateKeyStorePassword=sslpwd
1
2
3

如果防止连接中有密码的话也可以对整个路径使用jasypt加密