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

到底启用 SSL 之后还能不能被抓包?

  •  
  •   abelyao · 2014-10-31 18:10:42 +08:00 via Android · 14625 次点击
    这是一个创建于 3683 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,网站启用普通的 DV SSL 证书之后,客户端的其它软件,或者路由,网关,之类的,还能不能抓到数据包的 POST 内容?
    28 条回复    2014-11-02 19:31:52 +08:00
    bearice
        1
    bearice  
       2014-10-31 18:11:27 +08:00
    不能
    virusdefender
        2
    virusdefender  
       2014-10-31 18:18:51 +08:00
    能吧 在本地导入证书 参考http://wangsheng14591.blog.163.com/blog/static/3277971020130465730354/
    spance
        3
    spance  
       2014-10-31 18:18:58 +08:00   ❤️ 1
    看到的是经过加密的数据,里面基本都是不可见字符,无法知道里面的通信内容。
    但ip头和tcp头还是可见的,知道你发往那个ip的那个port
    lshero
        4
    lshero  
       2014-10-31 18:19:18 +08:00
    客户端如果安装了并且信任了私有CA办法的证书还是有可能的
    除非你改成双向的SSL连接
    abelyao
        5
    abelyao  
    OP
       2014-10-31 18:22:03 +08:00 via Android
    @lshero 能否详细说说双向 SSL 是什么?是网站那边设置的,还是…?
    abelyao
        6
    abelyao  
    OP
       2014-10-31 18:24:46 +08:00 via Android
    @spance 这个不怕,主要是数据包的内容,会不会像楼上几位说的,有证书就可以抓包了
    tabris17
        7
    tabris17  
       2014-10-31 18:29:42 +08:00
    本地能。

    中间人如果能搞到合法证书也能
    lshero
        8
    lshero  
       2014-10-31 18:43:54 +08:00   ❤️ 1
    @abelyao 向银行那样需要客户端也需要安装数字证书的就是双向SSL的 客户端网站都需要部署证书
    abelyao
        9
    abelyao  
    OP
       2014-10-31 18:51:12 +08:00
    @virusdefender @tabris17 @lshero
    几位都提到了中间人导入证书的事,这样听起来好像有证书是蛮简单的,但我还是不太明白是不是真的这么简单,我举个例子:
    运行在 SAE 上面的微信公众帐号服务端,传输的时候都带有 AppSecret 之类的参数,而且是明文的(之前的情况,现在已经升级了),那是不是意味着 SAE 的机房网管作为中间人,完全是可以看到这些敏感资料的?
    wanwangkangluo1
        10
    wanwangkangluo1  
       2014-10-31 18:53:50 +08:00
    http://www.fenesky.com/blog/2014/07/19/how-https-works.html
    你无法获取client端产生的PreMaster Secret是无法解密的。
    spance
        11
    spance  
       2014-10-31 18:54:19 +08:00   ❤️ 1
    @abelyao
    抓包在链路上任何一个中间节点都可以,但是他们无法知道传输内容。
    不管有谁的证书,都不能知道,证书只是不对称加密中的公钥,没有私钥是无法解迷的。
    况且这个过程是这样的,ssl握手过程就是用非对称加密方法传输了对称加密的算法和密钥,之后的通信都是用对称加密的密钥来加密,这个密钥只有握手的双发知道,中间人不知道这个密钥,自然无法解迷你的通信内容。
    tabris17
        12
    tabris17  
       2014-10-31 18:56:25 +08:00
    @abelyao 证书必须是合法的机构签发,必须在浏览器的受信任的机构列表里,除非是该机构不靠谱,比如CNNIC,或者机构的证书密钥泄漏造成伪造证书(以前有家被黑客入侵的根证书服务商密钥泄漏,后来这家公司就倒闭了),否则使用自己签发的证书客户端浏览器会有安全提示的
    wanwangkangluo1
        13
    wanwangkangluo1  
       2014-10-31 18:58:30 +08:00
    双向验证是验证client端合法性的,不要把这玩意扯进来了。
    RIcter
        14
    RIcter  
       2014-10-31 18:59:30 +08:00 via Android
    能,而且在geekpwn上還有在https下劫持網銀的show。
    jeansfish
        15
    jeansfish  
       2014-10-31 19:34:11 +08:00
    自己做中间人就看到了,就看自己是不是信任的,比如fiddler2
    abelyao
        16
    abelyao  
    OP
       2014-10-31 21:23:52 +08:00
    还是觉得好乱…
    @wanwangkangluo1 @spance @tabris17 几位朋友的说法是只有握手双方可以解密,其他人抓到包也看不到数据,
    而 @RIcter @jeansfish 几位朋友的说法则是可以…
    是不是我理解有误?这是两种不同的答案… 还是说,看中间人的技术水平?
    wangkangluo1
        17
    wangkangluo1  
       2014-10-31 21:29:53 +08:00
    @abelyao 反正我搞了2个礼拜,TLSv1.2一点办法都没有。这样吧,我提供服务器和生成证书,谁会的,教教我,愿支付¥200作为酬劳。
    spance
        18
    spance  
       2014-10-31 21:33:06 +08:00
    @abelyao
    我们说的“除握手双方外他人不知”,与那@jeansfish说的不矛盾。
    他说的是fiddler做代理的情况其实goagent也是这样,此时,直接的握手双方是fiddler与服务器,于是fiddler当然是明确知道传输内容的,然后用fiddler的伪造证书欺骗浏览器,返回原站数据。
    fiddler就是用它中间人特性来进行抓包分析的,而且还是你明确配置了代理指向了fiddler才发生。
    还是这句话,“除握手双方外他人不知”,另外,请不要过多的怀疑业界成熟广泛使用的https的安全防护能力。
    adow
        19
    adow  
       2014-10-31 21:35:53 +08:00
    其实可以把,证书就好比是密码,你在本地比如fliddler2上面添加那个证书就知道了你的密码,所以你机器上完全可以抓包。ssl 只是保证在传输的过程中被截获的内容是无法解密的吧,你亲手送人家一个密码当然就可以了。
    wanwangkangluo1
        20
    wanwangkangluo1  
       2014-10-31 21:37:10 +08:00
    @spance 说的比较在理。
    adow
        21
    adow  
       2014-10-31 21:40:12 +08:00
    传输的过程中指的是比如在你的路由器上拦截的时候,他的内容是无法得到明文的,当然如果他在别的地方使用你的证书的话应该也可以。
    我对这个不是很清楚,所以只能打这样的比方。
    在我之前一个帖子讨论 http 接口盗用的问题的时候(http://v2ex.com/t/90016#reply55),开始我们也认为用上ssl 别人就没法抓取内容了,其实他完全是可以的,他正常访问获得合法的证书后就可以很轻松的用fliddler 抓包获得明文。
    mornlight
        22
    mornlight  
       2014-10-31 21:45:13 +08:00
    只要你的私钥没有泄露,客户端那边没有信任奇奇怪怪的证书,按规矩来,就应该认为在中间环节上是不可解密的。
    客户端有问题的话,根本不是你该管的事。他要是信任了一个自签名的证书,你一点办法都没有。
    Quaintjade
        23
    Quaintjade  
       2014-10-31 21:47:16 +08:00 via Android
    @abelyao
    理论上(体系、协议、算法的设计上)中间人无法解密,但由于实现时(软件作者写软件时)有意无意的疏漏,或使用者的错误,使得中间人攻击成为可能

    比如设计上如果目标网站和证书对不上(或者证书不受信任),应该拒绝访问,或至少醒目提示,但很多软件会绕过这环节。
    比如设计上只有经过安全审计的机构才能获得CA资格,但许多软件会把自己的证书加到根证书列表里。
    比如设计上你从头到尾都应该用https通讯,实际上大多数人都是访问http,由浏览器去跳转到https。
    还有演示可以长期留存的cookies,等你下次访问目标网站时触发,插入代码。
    adow
        24
    adow  
       2014-10-31 21:47:45 +08:00
    @mornlight 没错,ssl 就是保证,如果你妥善保管你的证书(私钥,就好比密码),那我们就是安全的,你私钥给人用了,那他就知道了。而所谓的抓包,他完全可以在获取到私钥的情况下来抓包,这时他就能知道内容了。
    abelyao
        25
    abelyao  
    OP
       2014-10-31 21:58:31 +08:00 via Android
    @wangkangluo1
    @adow
    @Quaintjade
    @mornlight
    感动得泪流满面… 谢谢几位朋友的热心回答,大概明白意思了。
    待我慢慢消化,找个实际操作一下,我想我能理解得更好。
    jeansfish
        26
    jeansfish  
       2014-10-31 23:35:06 +08:00
    仔细看了下问题,其实理解了RSA加密就简单了。服务器知道私钥,暴露公钥,这样客户端获取私钥加密的内容,用公钥解密,客户端就信任这个内容是服务器送来的。客户端用公钥加密Post的内容,只有服务器有私钥才能解密。
    @spance 说的对。fiddler就是把这个过程变成了两步。
    julyclyde
        27
    julyclyde  
       2014-11-02 17:38:49 +08:00
    抓包是在网卡层面的,当然能抓
    你如果问能不能解密,那我告诉你,有私钥才能解,否则仅剩下理论上的可能性了
    tabris17
        28
    tabris17  
       2014-11-02 19:31:52 +08:00
    @abelyao 中间人需要替换合法证书才能获取明文数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:30 · PVG 19:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.