Mysql5.7默认是开启ssl的
(检查是否正常开启)
show variables like '%ssl%';
得到如下结果,可看到have_openssl
、have_ssl
均为YES
从Mysql取出 ca.pem
、client-key.pem
、client-cert.pem
,
默认在mysql的data目录
(查看data目录位置,一定要看!不同发行版可能位置不同)
show global variables like "%datadir%";
那么我的data位置就在/usr/local/var/mysql/
接下来进入该目录找到三个pem
cd /usr/local/var/mysql/ && ls
红色框选就是我们需要的pem,拷贝出来放到项目目录
cp ca.pem ~/Desktop/xxx
cp client-key.pem ~/Desktop/xxx
cp client-cert.pem ~/Desktop/xxx
配置Node.js ORM配置(这里使用Node.js 的 sequelize演示)
{
"database": "xxxxxx",
"username": "root",
"password": "123456",
"options": {
"host": "127.0.0.1",
"dialect": "mysql",
"pool": {
"max": 5,
"min": 0,
"idle": 10000
},
"define": {
"freezeTableName": true,
"createdAt": false,
"updatedAt": false
},
"ssl": true,
"dialectOptions":{
"ssl": {
"key": "",
"cert": "",
"ca": ""
}
}
}
}
由于项目架构将配置抽出为json作为配置文件
所以在项目初始化ORM时候做动态引入三个pem
其中为了验证程序在建立Mysql连接是否真的通过ssl
需要在连接后加入SHOW SESSION STATUS LIKE 'Ssl_cipher'
查询
如果成功的话Ssl_cipher
对应值会有Value,例如下
不放心的话也可以使用Wireshark抓包查看
如果证书已过期,请参考此文章
https://www.easybhu.cn/archives/204.html