使用中间件为远程数据库传输添加ssl加密

众所周知,mysql传输默认明文传输,导致数据库不在本地时远程传输容易泄露信息,虽然5.7版本之后是支持ssl加密,但很多源码和程序默认走明文,修改源码会对后期迁移或者管理添加不必要的麻烦。这时候可以使用中间件进行加密传输,这里选择Stunnel。好处就是不需要修改源码增加不必要的麻烦,其次就是可以一对多。服务端只需要配置一个程序,用户端的配置可以复用。不管对接多少台服务器只要把配置复制过去就能直接使用。缺点就是会有额外性能开销,每1000条tcp连接大概要用百分之七左右的性能开销,视服务器性能为定。

Stunnel是什么?

Stunnel 是一个开源的跨平台网络通信加密工具,主要用于为原本不支持 SSL/TLS 加密的 TCP 连接提供安全的加密通道。它可以在不改动原有应用程序代码的前提下,为如 POP3、IMAP、FTP、Telnet、HTTP 等明文协议提供加密支持。简言之,Stunnel 是一个“SSL 包装器”,让不安全的网络服务也能安全通信。

安装

Debian/Ubuntu安装

sudo apt update
sudo apt install stunnel4

RHEL/CentOS/Fedora 系统

sudo dnf install stunnel # Fedora / RHEL 8+
sudo yum install stunnel # CentOS 7 / RHEL 7

#如果默认仓库没有,可启用 EPEL(Extra Packages for Enterprise Linux)

sudo yum install epel-release    # CentOS 7
sudo dnf install epel-release    # RHEL 8+/CentOS Stream
sudo yum/dnf install stunnel

管理命令

sudo systemctl start stunnel4      # 启动
sudo systemctl stop stunnel4       # 停止
sudo systemctl status stunnel4     # 查看状态
sudo systemctl enable stunnel4     # 开机自启

安装后配置文件通常位于 /etc/stunnel/目录,启动会默认加载该目录下的所有配文件。

生成自签ssl证书,使用自有证书可以跳过这一步。

这里太长了就不写了使用一键脚本生成。详细可以百度或者使用自己熟悉工具自签

wget -N https://drive.ecve.cn/f/XLKcw/ssl.sh && bash ssl.sh

这是一键生成脚本会在Stunnel配置目录生成ssl证书文件夹并保存在里面。

编辑Stunnel配置文件

配置文件通常位于 /etc/stunnel/目录,编辑.conf后缀的配置文件,没有就自己创建一个,只要是conf后缀就行,填入一下配置

; MySQL over SSL via stunnel
pid = /run/stunnel4.pid
foreground = no
debug = 3
output = /var/log/stunnel4/mysql.log

; 全局证书(所有服务共享)
cert = /etc/stunnel/ssl/server.pem
key = /etc/stunnel/ssl/server.key
CAfile = /etc/stunnel/ssl/ca.crt

[mysql]
accept = 0.0.0.0:3307
connect = 127.0.0.1:3306

mysql数据库的3306端口会进行ssl加密从3307端口和用户端进行通信

然后重启Stunnel

sudo systemctl restart stunnel4 

至此服务端配置完成

用户端安装和服务端一样,区别在于配置不同

安装好后编辑conf配置,写入以下配置

; stunnel 客户端配置
client = yes
pid = /run/stunnel4.pid
output = /var/log/stunnel4/stunnel.log
debug = 3

[remote_service]
accept = 127.0.0.1:3306
connect = xx.xx.xx.xx:3307
CAfile = /etc/stunnel/ssl/ca.crt
verify = 1
; checkHost = xxxx.com   ; 如果使用域名

client 参数为yes,代表为用户端模式

accept 参数修改为服务端地址,端口为服务端的3307端口

accept 参数为用户端端口,本地有数据库运行的话请修改为其他端口避免冲突

CAfile 参数用户端证书需要把服务端ssl目录的ca.crt证书复制到用户端的ssl目录。

保存后重启stunnel 即可。方法适合一切传输加密。

mysql和应用程序配置一切照旧无需修改源码,mysql和应用程序并不知道传输进行了加密

另类方法:当然你也可以使用其他的组网或者内网穿透工具,工具本身自带加密的可以。例如frp或者nps之类的工具都可以,本身是支持传输加密或者手动配置加密。只是灵活性没有stunnel好,这类工具不支持一对多。每连接一台服务器都需要在服务端运行一个对应的程序

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇