如何对tcp流认证并加密
一个场景:目前越来越多的业务需要远程读写Redis,而Redis 本身不提供 SSL/TLS 的支持,在需要安全访问的环境下。
这时候就需要额外的手段进行加密认证,这里有两种手段:spiped 和 ngx stream proxy
现在服务端起一个监听在127 的 Redis server
1、使用spiped
[root@ ~]# wget http://www.tarsnap.com/spiped/spiped-1.6.0.tgz
[root@ ~]# tar xf spiped-1.6.0.tgz
[root@ ~]# cd spiped-1.6.0
[root@ ~]# tar xf spiped-1.6.0.tgz
[root@ ~]# cd spiped-1.6.0
[root@ spiped-1.6.0]# make && make install
[root@ spiped-1.6.0]# /usr/local/bin/spiped -h
spiped: illegal option -- -h
usage: spiped {-e | -d} -s <source socket> -t <target socket> -k <key file>
[-DFj] [-f | -g] [-n <max # connections>] [-o <connection timeout>]
[-p <pidfile>] [-r <rtime> | -R]
spiped -v
创建key,并将key分发到代理客户端
[root@ ~]# dd if=/dev/urandom bs=32 count=1 of=/var/spiped/redis_proxy.key
启动服务端和客户端代理:
#服务端:
[root@ ~]# /usr/local/bin/spiped -d -s '[0.0.0.0]:6010' -t '[127.0.0.1]:6379' -k /var/spiped/redis_proxy.key -p /var/spiped/redis_proxy_srv.pid
#客户端代理:
[root@ ~]# /usr/local/bin/spiped -e -s '[127.0.0.1]:6379' -t '[x.x.x.x]:6010' -k /var/spiped/redis_proxy.key -p /var/spiped/redis_proxy_cli.pid
客户端测试:
[root@ ~]# /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a redis@passwd ping
PONG
参考:http://www.tarsnap.com/spiped.html
2、使用ngx stream proxy
配置自签证书,略。
证书和key可以同时给服务端代理和客户端代理使用
ngx_stream_ssl_module模块(1.9.0)为流代理服务器提供必要的支持,以使用SSL / TLS协议。 默认情况下不构建此模块,应使用--with-stream_ssl_module配置参数启用它。
编译nginx需要加入--with-stream --with-stream_ssl_module 选项
服务端代理配置:
upstream redis_server{
server 127.0.0.1:6379 max_fails=3 fail_timeout=10s;
}
server{
listen 6010 ssl;
ssl_certificate /data/ssl/stream_proxy/stream_proxy.crt; #服务端证书
ssl_certificate_key /data/ssl/stream_proxy/stream_proxy.key; #服务端key
ssl_verify_client on; #开启对客户端的认证
ssl_client_certificate /data/ssl/stream_proxy/cacert.pem; #用于认证客户端ca证书
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
proxy_connect_timeout 5s;
proxy_timeout 5s;
proxy_pass redis6001_server;
error_log /data/logs/redis_sslproxy_srv.log debug;
}
客户端代理配置:
upstream redis_server{
server x.x.x.x:6010 max_fails=3 fail_timeout=10s;
}
server{
listen 127.0.0.1:6379;
proxy_ssl_name stream_proxy; #与证书中的hostname一致,覆盖用于验证后端的hostname,并通过SNI在与后端建立连接时传递,默认proxy_pass地址的host部分会被使用。
proxy_ssl on;
proxy_ssl_certificate /data/ssl/stream_proxy/stream_proxy.crt; #客户端证书
proxy_ssl_certificate_key /data/ssl/stream_proxy/stream_proxy.key; #客户端key
proxy_ssl_verify on; #开启对服务端的认证
proxy_ssl_trusted_certificate /data/ssl/stream_proxy/cacert.pem; #用于认证服务端ca证书
ssl_session_timeout 10m;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
proxy_ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
proxy_connect_timeout 5s;
proxy_timeout 5s;
proxy_pass redis_server;
error_log /data/logs/redis_sslproxy_cli.log debug;
}
如果仅仅是实现ngx stream proxy加密不认证的话,只需要在服务端代理配置好证书,客户端代理配置proxy_ssl on即可
参考链接:
1、https://blog.lyz810.com/article/2016/06/ngx_stream_proxy_module_doc_zh-cn/
2、https://blog.lyz810.com/article/2016/06/ngx_stream_ssl_module_doc_zh-cn/
3、https://my.oschina.net/foreverich/blog/1517128?utm_medium=referral
如何对tcp流认证并加密的更多相关文章
- Kcptun 是一个非常简单和快速的,基于KCP 协议的UDP 隧道,它可以将TCP 流转换为KCP+UDP 流
本博客曾经发布了通过 Finalspeed 加速 Shadowsocks 的教程,大家普遍反映能达到一个非常不错的速度.Finalspeed 虽好,就是内存占用稍高,不适合服务器内存本来就小的用户:而 ...
- TCP 流模式与UDP数据报模式(转)
TCP流模式与UDP数据报模式http://blog.csdn.net/s3olo/article/details/7914717 数据报(datagram)通常是指起始点和目的地都使用无连接网络服务 ...
- 自学Zabbix11.4 Zabbix SNMP认证与加密配置 SNMPv3
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix11.4 Zabbix SNMP认证与加密配置 SNMPv3 1. 增加snmp ...
- SNMP学习笔记之SNMPv3的报文格式以及基于USM的认证和加密过程
下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密过程! 1.SNMPv3的消息格式 如下图1: 图 1 其中,整个SNMPv3消息可以使用认证机制,并对EngineID.Contex ...
- TCP流嗅探和连接跟踪工具tcpick
TCP流嗅探和连接跟踪工具tcpick 由于网络通信协议众多,TCP连接状态众多,所以TCP分析较为复杂.Kali Linux提供一款专用工具tcpick.该工具支持在线实时嗅探和离线文件嗅探.它 ...
- TCP系列31—窗口管理&流控—5、TCP流控与滑窗
一.TCP流控 之前我们介绍过TCP是基于窗口的流量控制,在TCP的发送端会维持一个发送窗口,我们假设发送窗口的大小为N比特,网络环回时延为RTT,那么在网络状况良好没有发生拥塞的情况下,发送端每个R ...
- Socket 编程中,TCP 流的结束标志与粘包问题
因为 TCP 本身是无边界的协议,因此它并没有结束标志,也无法分包. socket和文件不一样,从文件中读,读到末尾就到达流的结尾了,所以会返回-1或null,循环结束,但是socket是连接两个主机 ...
- 使用同一个目的port的p2p协议传输的tcp流特征相似度计算
结论: (1)使用同一个目的port的p2p协议传输的tcp流特征相似度高达99%.如果他们是cc通信,那么应该都算在一起,反之就都不是cc通信流. (2)使用不同目的端口的p2p协议传输的tcp流相 ...
- [TCP/IP] TCP流和UDP数据报之间的区别
TCP流和UDP数据报之间的区别 1.TCP本身是面向连接的协议,S和C之间要使用TCP,必须先建立连接,数据就在该连接上流动,可以是双向的,没有边界.所以叫数据流 ,占系统资源多 2.UDP不是面向 ...
随机推荐
- 好大一个坑: EF Core 异步读取大字符串字段比同步慢100多倍
这两天遇到一个奇怪的问题,通过 EF/EF Core 查询数据库速度奇慢,先是在传统的 ASP.NET 项目中遇到(用的是EF6.0),后来将该项目迁移至 ASP.NET Core 也是同样的问题(用 ...
- sqlmap常用渗透方法
0X001 适用场景 1.获取了Mysql数据库root账号以及密码. 2.可以访问3306端口以及数据库. 0X002 扫描获取root账号的密码 通常有下面一些方法来获取root账号的密码 (1) ...
- COMP9021 PRINCIPLES OF PROGRAMMING
QUIZ 7COMP9021 PRINCIPLES OF PROGRAMMING$ python3 quiz_7.pyEnter four integers: 0 2 2 8Here is the g ...
- [vue开发记录]float label输入框
上图: 组件代码: <!-- Created by Locke Ou on 2018/6/20. --> <template> <div> <div clas ...
- npm run dev没反应
npm config set registry https://registry.npm.taobao.org npm install npm run dev
- 骑士(树形dp)
题意:给你一个基环树森林,每个点有一个权值,一条边上的两个节点不能同时选择.选取任意个节点,求最大权值和 对于每颗基环树:找环→断边→树形dp(没有上司的舞会) #include<iostrea ...
- VisualStudioCode中用dotnet命令创建多个ASP.NET Core 项目、类库、控制台程序,并添加应用间的引用
一.准备工作 首先安装VisualStudioCode并且可以使用. 1.首先新创建空的MyApps文件夹,作为项目主目录,下面将在这个文件夹中创建多个web应用程序.类型.控制台程序等. 2.打开V ...
- Port Channel and VPC
1.Port Channel 介绍 Port Channel 简介 绑定多个物理链路(最多8条),到一个单一的逻辑链路,在两个物理设备之间 每个物理端口只能被放入一个port-channel中. 在 ...
- opencart 3添加pdf文档下载功能
opencart 3适合做外贸商城,如果能在产品页那边添加pdf文档功能是最好的,符合国外用户的使用习惯,增加客户的黏性.其实opencart已经有一个downloadable product可下载产 ...
- opencart分类筛选逻辑修改为并且条件
opencart分类筛选模式默认是或的逻辑,满足条件1或条件2都展现出来,如果想要改成既满足条件1又满足条件2要怎么改呢?有一个插件可以实现,FixFilter OC2x,可以修改默认的筛选条件 1. ...