使用Stunnel为MySQL Server建立SSL隧道

笔者接手的一个项目有如下需求:

两台主机A和B,A上运行一个MySQL服务器和一套基于PHP的、以MySQL为数据库的CMS;B上除MySQL服务器外,其他皆与A相同。

要求B能安全地(通过SSL)连接A上的MySQL服务器,而这个CMS本身不支持MySQL over SSL

Stunnel可以提供一个安全的SSL隧道,理论上可以承载任何应用层协议——包括MySQL。

以下操作在A和B上执行

OpenSSL的目录需根据实际情况设置,Stunnel最高支持OpenSSL 1.1.1-dev

tar zxvf stunnel-5.44.tar.gz  cd stunnel-5.44/    #编译安装至/opt/stunnel,配置文件存放于/etc/stunnel  ./configure --prefix= --exec-prefix=/opt/stunnel --with-ssl=/opt/openssl-1.1.0g LDFLAGS="-Wl,--rpath=/opt/openssl-1.1.0g/lib -L/opt/openssl-1.1.0g/lib -lssl -lcrypto"  make  make install  

建立systemd service文件/lib/systemd/system/stunnel.service,内容如下:

[Unit]  Description=SSL tunnel daemons  After=network.target  After=syslog.target    [Install]  WantedBy=multi-user.target  Alias=stunnel.target    [Service]  Type=forking  ExecStart=/opt/stunnel/bin/stunnel /etc/stunnel/stunnel.conf  ExecStop=/bin/kill -TERM $MAINPID  ExecReload=/bin/kill -USR1 $MAINPID    # Give up if ping don't get an answer  TimeoutSec=600    Restart=always  PrivateTmp=false  

执行systemctl daemon-reload令更改生效

编辑A机(服务器端)的stunnel配置文件(/etc/stunnel/stunnel.conf,下同)

pid = /var/run/stunnel4/stunnel4.pid  #只允许使用AES-GCM且具有前向安全性的加密套件  ciphers = ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256  #只允许使用TLS 1.2  options = NO_SSLv2  options = NO_SSLv3  options = NO_TLSv1  options = NO_TLSv1.1    options = CIPHER_SERVER_PREFERENCE  options = DONT_INSERT_EMPTY_FRAGMENTS  renegotiation = no    [mysql]  #SSL证书与私钥  cert = /path/to/cert_with_intermediate_CA.cer  key = /path/to/private_key.key  #SSL监听端口  accept  = 6033  #MySQL监听地址及端口  connect = 127.0.0.1:3306  

编辑B机的Stunnel配置文件

pid = /var/run/stunnel4/stunnel4.pid    [mysql]  #本地(明文)监听端口  accept  = 127.0.0.1:3306  #远程(SSL)地址及端口  connect = {A_IP_ADDR}:6033  #使用客户端模式  client = yes  

编辑完后,A机和B机分别执行systemctl restart stunnel4.service以重启Stunnel

测试:

在B机执行openssl sclient -crlf -connect {AIP_ADDR}:6033,若出现类似如下报文,则A机配置无问题。

j  5.5.5-10.0.31-MariaDB-0ubuntu0.16.04.2?J%wLÿ? UD6!Clu)iWY9mysql_native_password  

可以在命令后添加-ssl3|-tls1|-tls1_1以测试是否确实禁用低版本SSL协议。

在B机执行telnet 127.0.0.1 3306,若返回类似报文,则B机配置也无问题。

此时,B机上的PHP程序,数据库连接部分保持与A机上的相同即可。

原文出处:hr98 -> https://hr98.xyz/mysql-stunnel/

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。