head-img Force's Blog

Node.js ssl 连接 Mysql5.7 (其它语言大致类似此流程)

Node.js,JavaScript,Database

Mysql5.7默认是开启ssl的

(检查是否正常开启)

show variables like '%ssl%';

得到如下结果,可看到have_opensslhave_ssl均为YES
1.png

从Mysql取出 ca.pemclient-key.pemclient-cert.pem

默认在mysql的data目录
(查看data目录位置,一定要看!不同发行版可能位置不同)

show global variables like "%datadir%";

那么我的data位置就在/usr/local/var/mysql/
2.png

接下来进入该目录找到三个pem

cd /usr/local/var/mysql/ && ls

3.png
红色框选就是我们需要的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
4.png

其中为了验证程序在建立Mysql连接是否真的通过ssl
需要在连接后加入SHOW SESSION STATUS LIKE 'Ssl_cipher'查询
如果成功的话Ssl_cipher对应值会有Value,例如下
5.png

不放心的话也可以使用Wireshark抓包查看
6.png

如果证书已过期,请参考此文章
https://www.easybhu.cn/archives/204.html

点我评论
打赏本文
二维码


125

文章

14

标签

 访客统计  Update-******