V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nixilin
V2EX  ›  问与答

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

  •  
  •   nixilin · 2015-11-10 18:06:42 +08:00 · 3295 次点击
    这是一个创建于 3328 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大概思路:
    一个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 ,相当于一个二次封装(加密)的角色。
    请问各位,这个监听能否做到?
    或者说,如果思路有问题,能否用其他方式实现?反正证书问题我可以想别的方法搞定。
    xjdrew
        1
    xjdrew  
       2015-11-10 18:36:31 +08:00
    如果 https 可以中间监听,那这协议还有什么意义呢?

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

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

    @weyou 不 care 浏览器证书方面的警告。 proxy 上的证书报警可以靠忽悠装额外的证书搞定。
    msg7086
        14
    msg7086  
       2015-11-11 10:07:09 +08:00   ❤️ 1
    @nixilin 都忽悠装证书了,为什么不直接忽悠装个木马。
    nixilin
        15
    nixilin  
    OP
       2015-11-11 19:48:47 +08:00
    @msg7086 各种管家/卫士/助手实在难缠。我本来也就没有 win32 编程基础,与其费心思给马做免杀过这些东东,还不如在 proxy 层动动脑子。
    msg7086
        16
    msg7086  
       2015-11-11 21:03:36 +08:00
    @nixilin 你以为自己插 CA 就免杀了么……
    nixilin
        17
    nixilin  
    OP
       2015-11-12 09:18:43 +08:00
    @msg7086 好像很少有某某软件管家卫视把系统根证书啥的清理掉吧。。。
    所以才想的这么一招,全部走代理。
    虽然折腾起来很麻烦,但是我感觉比做免杀脱壳加壳什么的好点
    msg7086
        18
    msg7086  
       2015-11-12 11:18:34 +08:00
    @nixilin Chrome 对 SSL 证书把关很严格,如果发现有可疑证书就会参与调查。
    通常自签名 CA 要么用在企业或者团体内部,要么用在单一域名上。
    如果有人签发奇怪的 CA 用来代理银行或者邮箱的话,很快就会暴露的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1045 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.