nginx 或者 squid 以代理的身份监听 ssl 流量的可行性?

2015-11-10 18:06:42 +08:00
 nixilin
大概思路:
一个wifi,由我来配置。分配IP自然是走dhcp。
dhcp 有分配 proxy 的配置项,可以配置 proxy_ip:port 给 dhcp client
分配好 proxy 下去给用户,用户(以 ios 为例)的系统流量都会走 proxy

proxy 上的 http 服务很好配, google 一大把,关键是 https 。
https 的配置,我找到了这个: http://shevacjs.com/2015/04/25/nginx-https-proxy/
但是我不甘心啊,因为这么一来,就真的只是个代理而已,监听如何实现?

我设想的模型如下:
目标服务器,以工行网银为例,简称 V 主机
流量都走 proxy 的用户,简称 S
可以 ssh 上去配置的 proxy 主机,简称 T
proxy 主机与用户有完整的证书信任关系,也就是说用户装了 proxy 所在机构相关的根证书。

客户挂代理,发请求访问工行网银( V ), proxy 拿到请求之后得到请求明文,然后 proxy 以客户端的身份(可以理解为一个浏览器)向实际的工行网银( V )发起请求。
V 返回请求结果,理论上说,因为 proxy ( T )是以客户端的身份访问 V ,所以 proxy ( T )可以拿到返回结果的明文。
T 用自己的证书对返回的内容加密,然后返回给原始用户( S ,发起这个请求的人)。

-----------------------------------------------------------------

无所谓部署 nginx 还是 squid ,个人倾向 n 。 proxy 也就是 T ,相当于一个二次封装(加密)的角色。
请问各位,这个监听能否做到?
或者说,如果思路有问题,能否用其他方式实现?反正证书问题我可以想别的方法搞定。
3128 次点击
所在节点    问与答
18 条回复
xjdrew
2015-11-10 18:36:31 +08:00
如果 https 可以中间监听,那这协议还有什么意义呢?

如果真想实现,那要给客户机器添加根证书,你用这个根证书签名一个假的工行网站,然后再转发所有请求。
paw
2015-11-10 19:48:17 +08:00
SSL/TLS 除了中间人
还可以 降级 不知道是不是这个说法,具体如下
http://fex.baidu.com/blog/2014/08/ssl-frontend-hijack/
kxjhlele
2015-11-10 20:15:59 +08:00
客户端证书问题 你要是能搞定 就可以监听。
nixilin
2015-11-10 20:24:24 +08:00
@paw 降级是另一种实现形式,但是感觉工程量略大。因为无法统一所有网站的处理方式。有些狠一点的就真的手动拼接 https 字符串或者别的姿势,压根没法一个一个网站的匹配。
nixilin
2015-11-10 20:29:48 +08:00
@xjdrew
@kxjhlele
这个问题主要是想从代理的层面搞定监听问题。确切的说也就是代理服务器的配置问题。
其实就是想, proxy 在收到下面连过来的代理请求时,把整个请求记录下来(各种猥琐姿势),自己重发一次;收到对方网站的回复时,在 proxy 上就拿到回复的明文(各种猥琐姿势,看点啥改点啥),然后用 proxy 自己的证书加密丢给客户端。
哪怕客户端看到的证书是 proxy 的(明显)也没关系,先配置好 proxy 再说。现在的难点就是 proxy 的配置。
wdlth
2015-11-10 20:31:54 +08:00
正向代理加反向代理
7654
2015-11-10 20:36:22 +08:00
我想说的是微软的 ISA 或 TMG 有这功能
mornlight
2015-11-10 20:39:37 +08:00
如果客户端没有信任你自签名的证书,中间代理理论上无法监听到明文 https 通信。
ericFork
2015-11-10 21:13:29 +08:00
没人好奇楼主想监听和修改的内容是什么吗?
msg7086
2015-11-10 22:39:18 +08:00
> proxy 主机与用户有完整的证书信任关系,也就是说用户装了 proxy 所在机构相关的根证书。

这个是最难的。你要么得获得用户电脑的管理员权限,要么得攻占下某个 CA 。
前者可能某个数字或者企鹅勉强能做到。
后者明显是想搞个大新闻。
weyou
2015-11-10 22:42:22 +08:00
@mornlight 对,这个才是重点。其实证书是可以伪造的,但是因为是自签名的, 浏览器端会出现不受信任的证书警告。
hellogbk
2015-11-10 23:40:08 +08:00
跟楼主各位说的差不多。
经过代理的流量都是加密的。
你能做的只是在握手阶段截取 SSL 证书换成你自己的。才有可能解密 HTTPS 的流量
但是要想让客户端信任你的证书,你就必须把你的根证书装到客户端系统上去。。
nixilin
2015-11-11 09:10:14 +08:00
@msg7086 小白用户那么多,懂 CA 证书啥的就不叫小白用户了。纯粹靠忽悠。

@weyou 不 care 浏览器证书方面的警告。 proxy 上的证书报警可以靠忽悠装额外的证书搞定。
msg7086
2015-11-11 10:07:09 +08:00
@nixilin 都忽悠装证书了,为什么不直接忽悠装个木马。
nixilin
2015-11-11 19:48:47 +08:00
@msg7086 各种管家/卫士/助手实在难缠。我本来也就没有 win32 编程基础,与其费心思给马做免杀过这些东东,还不如在 proxy 层动动脑子。
msg7086
2015-11-11 21:03:36 +08:00
@nixilin 你以为自己插 CA 就免杀了么……
nixilin
2015-11-12 09:18:43 +08:00
@msg7086 好像很少有某某软件管家卫视把系统根证书啥的清理掉吧。。。
所以才想的这么一招,全部走代理。
虽然折腾起来很麻烦,但是我感觉比做免杀脱壳加壳什么的好点
msg7086
2015-11-12 11:18:34 +08:00
@nixilin Chrome 对 SSL 证书把关很严格,如果发现有可疑证书就会参与调查。
通常自签名 CA 要么用在企业或者团体内部,要么用在单一域名上。
如果有人签发奇怪的 CA 用来代理银行或者邮箱的话,很快就会暴露的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX