Linux下使用Stunnel加密Redis,实现ssl认证
来源:互联网 发布:vps安装python 编辑:程序博客网 时间:2024/05/17 17:43
转载地址:https://laoyur.com/archives/183
Redis为了高效,仅提供了最基础的密码验证。当你想把redis-server暴露在公网上面时,仅依靠这个密码验证是远远不够的,就算你把密码设得再长再复杂,加大了暴破的难度,但由于通讯过程不加密,你的“正版”客户端在连接时,还是会有密码泄露的风险。
上面那篇链接使用Stunnel4为Redis的通讯建立了SSL隧道,可以有效保护密码不被窃取。该文虽好,但内容冗长,不方便快速实践。本文旨在最大化简化配置流程,在原文基础上进行了优化和修改,虽然做不到“一键配置”,但用起来还是非常方便的。
服务端准备工作
- 安装redis-server,这里不再赘述
- 修改
/etc/redis/redis.conf
,找到requirepass
,取消注释,加上密码 - 重启redis-server:
sudo service redis-server restart
服务端配置
# 安装stunnel4sudo apt-get updatesudo apt-get install stunnel4 -y# 启用stunnel4sudo sed -i '6s/.*/ENABLED=1/' /etc/default/stunnel4# 静默生成SSL证书,最终生成的文件是/etc/stunnel/private.pemsudo openssl genrsa -out /etc/stunnel/key.pem 2048 #如果你需要更高强度,可以设成4096sudo openssl req -new -x509 -key /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 9125 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" # 证书有效期25年sudo cat /etc/stunnel/key.pem /etc/stunnel/cert.pem > /etc/stunnel/private.pemsudo chmod 640 /etc/stunnel/key.pem /etc/stunnel/cert.pem /etc/stunnel/private.pem# 创建一个stunnel的配置文件,公网ip:6379 <--> 127.0.0.1:6379MY_IP_V4=`curl -4 -s icanhazip.com`sudo echo "cert = /etc/stunnel/private.pem" > /etc/stunnel/redis-server.confsudo echo "pid = /var/run/stunnel.pid" >> /etc/stunnel/redis-server.confsudo echo "[redis]" >> /etc/stunnel/redis-server.confsudo echo "accept = $MY_IP_V4:6379" >> /etc/stunnel/redis-server.confsudo echo "connect = 127.0.0.1:6379" >> /etc/stunnel/redis-server.conf# 启动stunnel4,stunnel4安装后可能会自动启动,所以这里用了restartsudo /etc/init.d/stunnel4 restart
以上命令我已经做成无需手动干预的版本了,所以可以贴到终端执行,或者直接用下面的懒人版本代替(首先要确保你服务器上安装了openssl):
sudo su -c "wget https://laoyur.com/dl/blog/2016/stunnel4-redis-server-setup.sh -O- | bash"
客户端准备工作
客户端你可以装全套:
sudo apt-get install redis-server
当你仅需要作client用时(redis-cli),可以仅安装redis-tools
:
sudo apt-get install redis-tools
或者你只需要其他版本的client实现,比如Python版时,完全可以不用装redis-tools
,只装个redis-py
即可:
pip install redis
客户端配置
客户端配置需要用到服务器生成的证书,所以没办法做成一键脚本,┑( ̄Д  ̄)┍
首先也是安装Stunnel4:
sudo apt-get updatesudo apt-get install stunnel4 -ysudo sed -i '6s/.*/ENABLED=1/' /etc/default/stunnel4
然后把服务端生成的private.pem拷贝一份到客户端的/etc/stunnel/private.pem
,
在/etc/stunnel/创建一个stunnel的配置文件,必须要以.conf
结尾,比如/etc/stunnel/redis-client.conf
,内容如下:
cert = /etc/stunnel/private.pemclient = yespid = /var/run/stunnel.pid[redis]accept = 127.0.0.1:6379connect = xxx.xxx.xxx.xxx:6379
accept
是本机监听的端口,一般也用6379
端口,但如果你本机也有一个redis-server在运行,那建议你还是改成其他端口;connect
是你服务端的ip和端口,基本上就是服务端配置里的accept
和connect
对调一下。client = yes
这行,是客户端独有的。
接下来重启stunnel4:
sudo /etc/init.d/stunnel4 restart
测试
pi@pi:~ $ redis-cli -p 6380 # 我的树莓派上本身已经跑了个redis-server,所以我把stunnel监听端口改成了6380127.0.0.1:6380> ping(error) NOAUTH Authentication required. # 连上了,提示需要密码127.0.0.1:6380> auth what_is_the_fucking_password # 认证OK # 认证成功127.0.0.1:6380> ping # ping一下服务器PONG # 一切OK127.0.0.1:6380>
- Linux下使用Stunnel加密Redis,实现ssl认证
- 使用stunnel双向证书认证加密samba的数据传输
- 使用 Stunnel 加密
- 使用加密的squid配合stunnel实现HTTP代理
- 使用 Stunnel 建立加密隧道
- stunnel加密通道使用实践
- linux下使用Stunnel配置与使用方式一例
- 实现在 Linux 下 Tomcat 的双向SSL认证
- 开源的Stunnel--通用SSL加密程序
- 开源的Stunnel--通用SSL加密程序
- 使用stunnel加密普通TCP连接
- Linux下tomcat配置ssl 单向认证
- 使用Httpclient实现SSL双向认证
- iOS客户端ssl签名认证加密双向加密建议使用双向加密更好维护
- Stunnel 加密隧道搭建
- tomcat实现SSL认证
- windows下使用redis requirepass认证不起作用
- Centos6.3下apache实现SSL虚拟主机双向认证
- linux安装chrome
- java中的回调机制
- python中if __name__ == '__main__'用途说明
- maven详解-(4)修改外部资源库
- 洛谷 1313||NOIP 2011 计算系数 二项式定理 解题报告
- Linux下使用Stunnel加密Redis,实现ssl认证
- java常用设计模式(装饰者模式)
- 从1900年1月1日(星期一),开始经过的n年当中,没个月的13号这一天是星期一,星期二,星期三...星期日的次数分别是多少
- R语言入门篇
- BZOJ 4517 浅谈错位排列组合计数
- 学习正则表达式:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间
- 51nod1621-贪心&枚举&好题&cf-花钱买车牌
- Adobe Premiere Pro CC 2018 Mac v12.0.0.224中文版下载
- TypeError: not all arguments converted during string formatting问题解决