V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JaaaaackZheng
V2EX  ›  程序员

菜鸟提问,关于 https 的中间人攻击问题

  •  
  •   JaaaaackZheng · 14 天前 · 1761 次点击
    https 通过 ssl 来保证数据在网络上加密传输,保证数据安全性。
    CA 颁发的数字证书可以保证不会被中间人攻击。
    那么如果我把 CA 服务器也一起劫持了是不是也能进行中间人攻击。
    对网络安全不太懂,大佬轻喷
    第 1 条附言  ·  14 天前
    (*Φ皿Φ*)知道错了各位大佬,立刻滚去学习
    33 条回复    2021-01-14 16:16:27 +08:00
    zxlzy
        1
    zxlzy   14 天前
    是的,证书是 CA 颁发的,如果 CA 被攻击了,签发了假的证书,https 就被破解了。
    JaaaaackZheng
        2
    JaaaaackZheng   14 天前
    @zxlzy 这样啊,我还想问一下。使用 dns 劫持的方式,我把发向 CA 服务器的请求劫持了伪造 CA 服务器,这样感觉加入 CA 也只是增加了中间人攻击的步骤而已。
    ericwood067
        3
    ericwood067   14 天前
    @JaaaaackZheng 除非你黑了 CA 的服务器,拿到他的私钥,只劫持发给 CA 服务器的请求是没用的。
    also24
        4
    also24   14 天前   ❤️ 1
    简单点来说:不存在 『发向 CA 服务器的请求』

    大部分 CA 的信息,是直接内置在 操作系统 / 网络库 中的。

    你也可以手动信任其它 CA,来协助这些 CA 对你进行中间人(例如抓包的时候)。



    另:
    严格来说,OCSP 请求属于 『发向 CA 服务器的请求』,OCSP 请求也确实可以被劫持,此处暂不谈。
    smileawei
        5
    smileawei   14 天前
    所以 CA 供应商的审计是十分严格的。每年缴纳大量的保证金。还有各种审计。
    之前中国大陆的几家 CA 公司都因为不合规被 Google 和 Mozilla 拉黑。
    可以自行百度 CNNIC CA 和沃通 CA 的事情。
    smileawei
        6
    smileawei   14 天前
    https://www.williamlong.info/archives/4183.html

    CNNIC 的这个行为就是你说的 CA 供应商做中间人。这个用户无法察觉,所以仅这一件事。CNNIC 的 CA 就彻底不被浏览器信任了。
    Tumblr
        7
    Tumblr   14 天前
    @JaaaaackZheng #2 呃。。。怎么说呢,感觉你应该先了解一下黑 CA 服务器的难度有多大……可能比猜中私钥的难度还要大。。。不管是在物理层面(社工)还是技术层面。
    首先抛开技术层面,单是物理层面的防护,就超出了相当相当相当大部分人的想象。
    JaaaaackZheng
        8
    JaaaaackZheng   14 天前
    @smileawei 我指的是增加个中间人攻击,伪装成 CA 来响应客户端请求。你好像说的跟我不是一回事
    weyou
        9
    weyou   14 天前 via Android   ❤️ 1
    纯属想多了系列。CA 的证书内置在客户端设备中,验证都是本地验证,并没有什么 CA 服务器来帮助验证,除非你有客户端的控制权,否者单靠中间人是无法攻破 HTTPS 的
    JaaaaackZheng
        10
    JaaaaackZheng   14 天前
    @Tumblr 利用 DNS 劫持 OCSP 请求这样会很难吗,不是黑 CA 服务器喔。
    also24
        11
    also24   14 天前   ❤️ 1
    @JaaaaackZheng #8
    因为你把证书的验证过程理解错了。

    证书的验证过程不是说浏览器拿着证书去服务器问:这个证书我可以信任嘛?

    而是操作系统 /浏览器 /网络库,早就内置好了自己信任的 CA 的证书,当需要验证的时候直接在本地进行比对。

    这个过程中,是不存在网络请求的,自然也就无从拦截。


    再次备注:
    为了方便理解,这里暂时不讨论 OCSP 的情况。
    also24
        12
    also24   14 天前
    @JaaaaackZheng #10
    我这里提到 OCSP 是为了防杠 ,你先假装这个东西根本不存在,不要搭理他。
    JaaaaackZheng
        13
    JaaaaackZheng   14 天前
    @weyou
    @also24
    那如果是最近才注册的证书不是需要 CA 服务器验证吗
    carlclone
        14
    carlclone   14 天前 via Android
    可以,这就是 fiddler 的原理,但是只能建立新会话,已经建立的连接依旧没办法中间人攻击
    weyou
        15
    weyou   14 天前 via Android   ❤️ 1
    你把 CA 证书和用户证书弄混了,内置的 CA 证书很少会发生改变。用户自己证书是部署在用户自己的服务器上的,在上网过程中并不再存在跟 CA 服务器的通信。
    lanternxx
        16
    lanternxx   14 天前   ❤️ 1
    @JaaaaackZheng #13 SSL 证书从来就都不需要 CA 服务器介入验证,任何时候的都不需要。可信任的根证书是预置于客户端本地的。
    OCSP 是用来检查证书吊销状态的,它不能使无效的证书变有效。
    also24
        17
    also24   14 天前   ❤️ 1
    @JaaaaackZheng #13
    所以说你没理解整个证书机制,证书机制自身是不需要联网验证的。

    它只需要确认,你拿来验证的这个证书,是由内置的可信任证书签发的就行了。
    这个验证过程是基于签名机制的,不需要联网。


    附加内容:
    但这个机制有个缺陷,就是证书一旦签发,就没有撤回的机会了,因为所有的验证过程都可以离线完成。

    因此才出现了前面提到的 OCSP,它需要联网查询吊销列表。
    劫持它确实是可行的,但是并不能让一个不受信任的证书变成信任,只能让被吊销的正牌证书暂时不被认出。
    CEBBCAT
        18
    CEBBCAT   14 天前
    干脆打回重学证书签发流程吧…… 学而不思则罔 思而不学则殆
    JaaaaackZheng
        19
    JaaaaackZheng   14 天前
    @also24
    @lanternxx
    @weyou
    确实是我没理解好,之前一直认为判断证书是否被篡改需要连接 CA 服务器
    JaaaaackZheng
        20
    JaaaaackZheng   14 天前
    (*Φ皿Φ*)知道错了各位大佬,立刻滚去学习
    zxlzy
        21
    zxlzy   14 天前
    @JaaaaackZheng 我误解了你的意思,但是我的回复是没错的......
    littlewing
        22
    littlewing   14 天前
    很简单,学 12306,弹出一个框要你安装并信任证书,然后大多数不懂的人就会安装,然后就可以随便玩了
    namelosw
        23
    namelosw   14 天前
    这个东西跟 JWT 验签类似, 三方信任的时候, 消费方和签发方是没有请求, 单纯靠密码学原理工作的.
    pkoukk
        24
    pkoukk   13 天前
    https 其实是一个信任链,根在 CA 证书上,只要证书没问题,整个链路都是可信的
    dorothyREN
        25
    dorothyREN   13 天前
    @Tumblr #7 CA 服务器一般都是离线的。
    smileawei
        26
    smileawei   13 天前
    @JaaaaackZheng #8 是中间人呀。你拿到可信的 CA 服务器。就可以自己任意签发可信的证书了。然后再做中间人肯定就没办法察觉了。
    v2tudnew
        27
    v2tudnew   13 天前
    @smileawei 你这必须黑入 CA 服务器吧
    v2tudnew
        28
    v2tudnew   13 天前
    那么问题来了,假设用户 CA 根证书被掉包,如何简单发现呢?
    kajweb
        29
    kajweb   13 天前
    Hi,你可以 star 我的项目: https://github.com/kajweb/stop-debugger
    介绍一下:利用中间人攻击修改网页源码。
    主要流程:
    1 、启动服务
    2 、信任 CA 证书(加到系统)
    3 、启动 SNI 服务器,生成对应域名的证书
    4 、愉快的代理 https
    julyclyde
        30
    julyclyde   13 天前
    问题是合规的 CA 根本不上网
    disk
        31
    disk   13 天前
    @v2tudnew 可信根证书表可以查的,比如 https://www.ccadb.org/ ,和本地比对下指纹就知道了。
    v2tudnew
        32
    v2tudnew   13 天前
    @disk 但是有 2-30 张,一张张对吗?太麻烦了
    mxT52CRuqR6o5
        33
    mxT52CRuqR6o5   13 天前
    CA 根证书是存在浏览器或系统里的,属于先验信息
    根据 CA 根证书通过信任链一层一层信任到网站的证书(如果网站的证书链不全,本地也没有缺失的链路证书,就可能导致验证失败),过程是离线的
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1223 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:42 · PVG 03:42 · LAX 11:42 · JFK 14:42
    ♥ Do have faith in what you're doing.