• 7. 使用stunnel为mysql建立加密隧道


    环境:
    服务端(虚拟机):ubuntu18.04 + mysql5.7
    客户端:Windows10

    stunnel:stunnel5

    1. 服务端

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    [2]. 安装 stunnel5
    click me, 去下载

    tar -xzvf stunnel-5.62.tar.gz
    cd stunnel-5.62
    ./configure
    make
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [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
    
    • 1
    • 2

    [4]. 配置stunnel

    mkdir /etc/stunnel
    touch /etc/stunnel/stunnel.conf
    vim stunnel.conf
    
    • 1
    • 2
    • 3

    在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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. 客户端

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    [3].开启stunnel客户端和stunnel服务器
    在这里插入图片描述

    在这里插入图片描述
    [4]. 打开stunnel.exe, 然后打开cmd, 执行 mysql -h 127.0.0.1 -P 3305 -u root -p,并输入密码。
    发现此时已经连接到远程服务器的数据库,并且已经为其建立了加密隧道。
    在这里插入图片描述
    在这里插入图片描述

    3. 下面对stunnel客户端和服务端的配置文件的关键点进行解析一下

    客户端:

    [mysql_test]
    accept = 3305						# 监听本地3305端口的数据
    connect = 192.168.64.131:3307		# 监听本机3305端口的加密数据并将其传输到服务端192.168.64.131的3307端口上
    
    • 1
    • 2
    • 3

    服务端:

    [mysql_test]
    accept = 3307						# 监听本地3307端口的数据
    connect = 127.0.0.1:3306			# 监听本地3307端口的数据并将其传输到本地127.0.0.1的3306端口上
    
    • 1
    • 2
    • 3

    可以大概这么理解:当我们在客户端的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加密隧道。

    4. 可能参考到的博客:

    [1]. https://www.cnblogs.com/cutmr/p/15677704.html
    [2]. https://blog.csdn.net/qq_43667702/article/details/87020490

  • 相关阅读:
    最新版本Eclipse安装SVN插件Subclipse过程
    阿里面试官:聊聊如何格式化Instant
    《从0开始写一个微内核操作系统》6-GIC中断
    微信小程序播放视频的时候如果突然插入一个音频视频就会卡顿一下
    合宙昆仑镜LCD驱动测试
    22-Docker-常用命令详解-docker pull
    Python与数据分析--Pandas-1
    java计算机毕业设计企业信息安全评价系统源码+系统+mysql数据库+lw文档
    java毕业设计在线售药系统Mybatis+系统+数据库+调试部署
    HBase完全分布式搭建 | 集群建表测试
  • 原文地址:https://blog.csdn.net/TianYanRen111/article/details/128046136