简介

Stunnel是一个自由的跨平台软件,用于提供全局的TLS/SSL服务。

针对本身无法进行TLS或SSL通信的客户端及服务器,Stunnel可提供加密安全连接。该软件可在许多操作系统下运行,包括类Unix系统,以及Windows。Stunnel依赖于某个独立的库,如OpenSSL或者SSLeay,以实现TLS或SSL协议。

Stunnel使用基于X.509数字证书的公开密钥加密算法来保证SSL的安全连接。客户端也可以选用自签名的数字证书来得到授权

使用

以下以 Redis 为例,其他基于 TCP 通信的程序理论上也可使用该方法实现 SSL认证。

服务端

安装 Redis

在服务端安装 Redis

  1. 安装 redis

    # yum -y install redis
    
  2. 启动 Redis

    # systemctl start redis && systemctl enable redis
    

安装 Stunnel

  1. 安装 Stunnel

    # yum -y install stunnel
    
  2. 创建证书

    # vim gencert-stunnel.sh
    

    写入如下内容

    #!/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
    

    保存退出后,赋予脚本可执行权限,并执行。按提示输入域名即可。

    # chmod +x gencert-stunnel.sh
    # ./gencert-stunnel.sh
    
  3. 创建配置文件

    # vim /etc/stunnel/stunnel.conf
    

    内容如下(以 Redis 为例):

    cert = /etc/stunnel/private.pem
    pid = /var/run/stunnel.pid
    # 定义一个服务
    [redis]
    # 监听端口
    accept = 56379
    # 本地redis地址
    connect = 127.0.0.1:6379
    
  4. 创建 systemd 脚本

    # vim /usr/lib/systemd/system/stunnel.service
    

    内容如下:

    [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
    

    保存退出后启动服务

    # systemctl daemon-reload
    # systemctl start stunnel
    # systemctl enable stunnel
    

客户端

安装 Stunnel

  1. 安装 Stunnel

    # yum -y install stunnel
    
  2. 从 redis 服务器上拷贝 /etc/stunnel/private.pem 到本地

    # scp root@stunnel-server:/etc/stunnel/private.pem /etc/stunnel/private.pem
    
  3. 创建配置文件

    # vim /etc/stunnel/stunnel.conf
    

    内容如下(以 Redis 为例):

    cert = /etc/stunnel/private.pem
    # 客户端独有标识
    client = yes
    pid = /var/run/stunnel.pid
    [redis]
    # 本机监听的端口
    accept = 6379
    # 服务端的IP及端口
    connect = stunnel-server:56379
    
  4. 创建 systemd 脚本

    # vim /usr/lib/systemd/system/stunnel.service
    

    内容如下:

    [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
    

    保存退出后启动服务

    # systemctl daemon-reload
    # systemctl start stunnel
    # systemctl enable stunnel
    

测试/使用

使用redis客户端连接 stunnel 客户端 IP:Port 测试。

# redis-cli -h stunnel-client -p 6379

标题:使用 Stunnel 做 Redis SSL认证
作者:akiya789
地址:https://little-star.love/articles/2020/06/22/1592813656621.html

添加新评论