分享:基于 Node.js 的 HTTPS MITM(中间人)代理的原理和实现

2017-01-29 20:23:56 +08:00
 wuchangming89

基于 Node.js 的 HTTPS MITM(中间人)代理的原理和实现

分享自己写的一篇关于 HTTPS 的技术博客

地址: https://github.com/wuchangming/https-mitm-proxy-handbook

部署在公网的服务面临着越来越多的流量劫持、运营商劫持事件,为了能更好的保障信息的安全性和完整性, HTTPS 得到了越来越多的重视。基于此原因,本文章尝试从另一个视角,通过使用 Node.js 实现一个简单的 HTTPS 中间人代理的方式,阐述 HTTPS 是如何保证网络信息的安全,并且分析用户的何种行将会导致 HTTPS 的安全性失效。

MITM (中间人)代理的技术手段对于软件开发者并不陌生,在实际开发和测试中经常会使用。调试接口、查看 HTTP 请求与响应时使用的 http 抓包调试工具如: Fiddler 、 Charles ,就是基于该原理实现的。

本文会更侧重于代码的实现,每一步都提供详细的、可运行的 js 代码实现。

6737 次点击
所在节点    JavaScript
17 条回复
jsser
2017-01-29 20:31:09 +08:00
谢谢分享!
Sparetire
2017-01-29 22:26:58 +08:00
很有帮助,非常感谢!
wuchangming89
2017-01-29 22:31:59 +08:00
@Sparetire ,谢谢!
EPr2hh6LADQWqRVH
2017-01-29 23:14:14 +08:00
????黑人问号
wuchangming89
2017-01-29 23:16:14 +08:00
@avastms ,没太懂,什么意思?
SoloCompany
2017-01-30 01:06:52 +08:00
一般而言的 MITM 不包括正向代理
当然为了调试的目的也可以在正向代理上附加 MITM
如果你想做 MITM 的普及,应当实现一个反向代理 + DNS 污染
linbiaye
2017-01-30 06:49:25 +08:00
如何取得“信任”

回到最初的思路分析:建立一个可以同时与客户端和服务端进行通信的网络服务。

现在需要解决的是如何得到客户端的信任,才能建立与客户端的通信。经过上面的分析,突破口就是 CA 证书。只要自定义的 CA 证书得到了客户端的信任,我就能用 CA 证书签发各种“伪造”的服务器证书。简单说就是让客户端系统安装上我们自定义的 CA 证书。

这算不上 mitm 了,都能给客户端安装 ca 证书了,啥不能干。思路应该是中间设备劫持 dns 和第一次 http->https 的 302 跳转,让客户端和中间设备保持 http 通信,同时剥去来自服务器端的 hsts header 。对于客户端已经被告知 hsts 的站点无效。
lslqtz
2017-01-30 07:13:13 +08:00
@linbiaye 这就是 mitm ,只不过能取得客户端的信任。
HTTP 的劫持也是中间人,只要你和服务器的通信被第三方修改过或嗅探过,就属于被中间人。
des
2017-01-30 08:28:05 +08:00
https 劫持的话,就算去掉了 hsts ,然后代理。我也能插随机 js 跳回去,再加上 cookie secure ,不太可能破解。
wuchangming89
2017-01-30 09:53:24 +08:00
@linbiaye ,想说的就是装了 CA 证书什么都能干 :)。对于一般用户他不知道什么是 CA 证书,被诱导安装上自定义的 CA 是很容易的。

另外,“ https 剥离”我觉得更应该叫 http mitm ,因为全程和 https 都没什么关系。

wuchangming89
2017-01-30 10:00:03 +08:00
@SoloCompany ,一个完整的 hack 方案确实是要包括流量劫持,但这里想讲的只是 HTTPS 的证书链,所以就用最简单的正向代理的方式。
wuchangming89
2017-01-30 10:02:00 +08:00
@des ,随机 js ?
linbiaye
2017-01-30 11:33:19 +08:00
@wuchangming89 垃圾 12306 还在用自签的,估计已经不少人被装了不明来路的 ca 证书。
breeswish
2017-01-30 17:48:05 +08:00
@linbiaye 只信任那一张证书就可以了,不需要信任 12306 的 CA
wuchangming89
2017-01-30 20:15:23 +08:00
@breeswish ,但一般用户其实不知道 CA 是什么,会留下安全隐患
breeswish
2017-01-31 14:48:15 +08:00
@wuchangming89 一般用户连 https 都不知道 ┑( ̄Д  ̄)┍
sola97
2017-01-31 19:20:40 +08:00
非一般用户不就没辙了

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

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

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

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

© 2021 V2EX