环境:
服务端(虚拟机):ubuntu18.04 + mysql5.7
客户端:Windows10
stunnel:stunnel5
[1].
安装 openssl 1.0.2
tar -xzvf openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
./config -fPIC --prefix=/usr/local/openssl/ enable-shared
make
make install
cp -r /usr/local/openssl/include/openssl /usr/include
[2].
安装 stunnel5
click me, 去下载
tar -xzvf stunnel-5.62.tar.gz
cd stunnel-5.62
./configure
make
make install
[3].
在服务端生成2个证书
一个服务端的stunnel_s.pem,一个客户端的stunnel_c.pem;
openssl req -new -x509 -days 36500 -nodes -out stunnel_c.pem -keyout stunnel_c.pem
openssl req -new -x509 -days 36500 -nodes -out stunnel_s.pem -keyout stunnel_s.pem
[4].
配置stunnel
mkdir /etc/stunnel
touch /etc/stunnel/stunnel.conf
vim stunnel.conf
在stunnel.conf中输入以下语句:
client = no
debug = 7
output = /var/log/stunnel.log
pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel_s.pem
key = /etc/stunnel/stunnel_s.pem
[mysql_test]
accept = 3307
connect = 127.0.0.1:3306
最后再将之前生成的stunnel_s.pem和stunnel_c.pem拷贝到/etc/stunnel下,并chmod 400 *.pem。
[1].
安装stunnel客户端
click me, 去下载
stunnel-5.65-win64-installer.exe
[2].
在stunnel安装目录下找到config目录,此目录下有stunnel.conf配置文件,自带的,可以将其删除,然后自行创建stunnel.conf, 并输入以下内容:
client = yes
debug = 7
output = stunnel.log
[mysql_test]
accept = 3305
connect = 192.168.64.131:3307
cert = stunnel.pem
[3].
开启stunnel客户端和stunnel服务器
[4].
打开stunnel.exe, 然后打开cmd, 执行 mysql -h 127.0.0.1 -P 3305 -u root -p
,并输入密码。
发现此时已经连接到远程服务器的数据库,并且已经为其建立了加密隧道。
客户端:
[mysql_test]
accept = 3305 # 监听本地3305端口的数据
connect = 192.168.64.131:3307 # 监听本机3305端口的加密数据并将其传输到服务端192.168.64.131的3307端口上
服务端:
[mysql_test]
accept = 3307 # 监听本地3307端口的数据
connect = 127.0.0.1:3306 # 监听本地3307端口的数据并将其传输到本地127.0.0.1的3306端口上
可以大概这么理解:当我们在客户端的cmd中输入:mysql -h 127.0.0.1 -P 3305 -u root -p时,
实际上我们在本地3305的端口上开启了监听,那么3305端口的数据将会被加密传输到192.168.64.131主机的3307端口上,
而到达192.168.64.131的3307端口上后,又将其转发到192.168.64.131主机的3306端口上,也即是127.0.0.1:3306。
这样,就为客户端和服务端之间的mysql通信建立了一条stunnel加密隧道。
[1].
https://www.cnblogs.com/cutmr/p/15677704.html
[2].
https://blog.csdn.net/qq_43667702/article/details/87020490