使用 Stunnel 做 Redis SSL认证
简介
Stunnel是一个自由的跨平台软件,用于提供全局的TLS/SSL服务。
针对本身无法进行TLS或SSL通信的客户端及服务器,Stunnel可提供加密安全连接。该软件可在许多操作系统下运行,包括类Unix系统,以及Windows。Stunnel依赖于某个独立的库,如OpenSSL或者SSLeay,以实现TLS或SSL协议。
Stunnel使用基于X.509数字证书的公开密钥加密算法来保证SSL的安全连接。客户端也可以选用自签名的数字证书来得到授权)。
使用
以下以 Redis 为例,其他基于 TCP 通信的程序理论上也可使用该方法实现 SSL认证。
服务端
安装 Redis
在服务端安装 Redis
安装 redis
shell 1
yum -y install redis
启动 Redis
shell 1
systemctl start redis && systemctl enable redis
安装 Stunnel
安装 Stunnel
shell 1
yum -y install stunnel
创建证书
shell 1
vim gencert-stunnel.sh
写入如下内容
gencert-stunnel.sh >folded 1
2
3
4
5
6
7
8
9
10
11!/usr/bin/env bash
read -p "Enter your domain [example.com]: " DOMAIN
openssl genrsa -out /etc/stunnel/key.pem 2048
openssl req -new -x509 -key /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 365 -subj "/C=CN/ST=Beijing/L=Beijing/O=akiya/CN=${DOMAIN}"
cat /etc/stunnel/key.pem /etc/stunnel/cert.pem > /etc/stunnel/private.pem
chmod 640 /etc/stunnel/key.pem /etc/stunnel/cert.pem /etc/stunnel/private.pem保存退出后,赋予脚本可执行权限,并执行。按提示输入域名即可。
shell 1
2chmod +x gencert-stunnel.sh
./gencert-stunnel.sh创建配置文件
shell 1
vim /etc/stunnel/stunnel.conf
内容如下(以 Redis 为例):
/etc/stunnel/stunnel.conf >folded 1
2
3
4
5
6
7
8cert = /etc/stunnel/private.pem
pid = /var/run/stunnel.pid
# 定义一个服务
[redis]
# 监听端口
accept = 56379
# 本地redis地址
connect = 127.0.0.1:6379创建 systemd 脚本
1
vim /usr/lib/systemd/system/stunnel.service
内容如下:
/usr/lib/systemd/system/stunnel.service >folded 1
2
3
4
5
6
7
8
9
10
11
12
13
14[Unit]
Description=SSL tunnel
After=syslog.target
[Service]
Type=forking
ExecStart=/usr/bin/stunnel /etc/stunnel/stunnel.conf
ExecStop=/usr/bin/kill -9 $(pgrep stunnel)
ExecStatus=pgrep stunnel
Restart=always
[Install]
WantedBy=multi-user.target保存退出后启动服务
shell 1
2
3systemctl daemon-reload
systemctl start stunnel
systemctl enable stunnel
客户端
安装 Stunnel
安装 Stunnel
shell 1
yum -y install stunnel
从 redis 服务器上拷贝
/etc/stunnel/private.pem
到本地shell 1
scp root@stunnel-server:/etc/stunnel/private.pem /etc/stunnel/private.pem
创建配置文件
shell 1
vim /etc/stunnel/stunnel.conf
内容如下(以 Redis 为例):
/etc/stunnel/stunnel.conf >folded 1
2
3
4
5
6
7
8
9cert = /etc/stunnel/private.pem
# 客户端独有标识
client = yes
pid = /var/run/stunnel.pid
[redis]
# 本机监听的端口
accept = 6379
# 服务端的IP及端口
connect = stunnel-server:56379创建 systemd 脚本
shell 1
vim /usr/lib/systemd/system/stunnel.service
内容如下:
/usr/lib/systemd/system/stunnel.service >folded 1
2
3
4
5
6
7
8
9
10
11
12
13
14[Unit]
Description=SSL tunnel
After=syslog.target
[Service]
Type=forking
ExecStart=/usr/bin/stunnel /etc/stunnel/stunnel.conf
ExecStop=/usr/bin/kill -9 $(pgrep stunnel)
ExecStatus=pgrep stunnel
Restart=always
[Install]
WantedBy=multi-user.target保存退出后启动服务
shell 1
2
3systemctl daemon-reload
systemctl start stunnel
systemctl enable stunnel
测试/使用
使用redis客户端连接 stunnel 客户端 IP:Port 测试。
1 | redis-cli -h stunnel-client -p 6379 |
- 本文标题:使用 Stunnel 做 Redis SSL认证
- 本文作者:akiya
- 本文链接:https://little-star.love/posts/1e4e8e0d/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!