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

http2.0 是否能缓解运营商劫持?

  •  
  •   mengdisheng · 2018-02-11 10:07:18 +08:00 · 8237 次点击
    这是一个创建于 2512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为个人博客用了腾讯云 cdn https,里面好像能直接开 http2.0 所以有这个疑问。

    第 1 条附言  ·  2018-02-11 13:18:41 +08:00
    大家别吵了哈,我总结一下。
    1.对 https 劫持,运营商早就有类似对技术,望有人愿意详细讲解技术实现。
    2.替换 https 证书劫持?是否确实存在,还有待详细对考证。因为此类劫持很明显。
    3.http2 的实际应用中,浏览器层面是 rfc 加 tls,所以单独做对 rfc 的劫持没有太大意义。
    4 目前已知的支持 http2 的浏览器只能用 https。
    以上总结便于新进帖子的人快速了解评论,如有不对 at 我哈。
    71 条回复    2018-02-12 10:00:40 +08:00
    gamexg
        1
    gamexg  
       2018-02-11 10:09:41 +08:00
    已知的浏览器只有 https 支持 http2,所以是可以防劫持。
    lniwn
        2
    lniwn  
       2018-02-11 10:13:51 +08:00 via Android
    目前的浏览器实现,HTTP2.0 都是密文的,所以可以解决运营商内容劫持的问题。
    mengzhuo
        3
    mengzhuo  
       2018-02-11 10:27:33 +08:00
    https 就防篡改(也就是劫持)

    1、2 楼也请看看基础书籍
    rrfeng
        4
    rrfeng  
       2018-02-11 10:28:00 +08:00   ❤️ 1
    明文 http2 一定程度上可以,因为我相信运营商不会开发这个技术的,为什么呢?因为 http2 明文只是 RFC 支持,实际上浏览器是必须 http2 + tls 的。

    tls ( https )可以防劫持。
    mengdisheng
        5
    mengdisheng  
    OP
       2018-02-11 10:31:50 +08:00
    @rrfeng 意思就是并不需要 http2 tls 就完全可以防劫持了是吧。。。好像 http2 没普及
    msg7086
        6
    msg7086  
       2018-02-11 10:35:45 +08:00
    HTTP 2 在 HTTPS 上是可以防止劫持的。没有开 HTTP 2 的 HTTPS 也可以防止劫持。

    @mengzhuo 他们也并没有说错,也不需要看基础书籍。
    rrfeng
        7
    rrfeng  
       2018-02-11 10:40:01 +08:00
    @mengdisheng
    除非你自己实现,现在并没有支持不带 tls 的 http2 客户端可以用。
    yingfengi
        8
    yingfengi  
       2018-02-11 10:42:12 +08:00 via Android
    私钥不泄露就没法劫持
    yingfengi
        9
    yingfengi  
       2018-02-11 10:42:36 +08:00 via Android
    不过可以反过来做 ssl 卸载
    mengzhuo
        10
    mengzhuo  
       2018-02-11 10:44:20 +08:00
    @msg7086 #6

    https 里的 s 是 TLS (传输层安全 4 层的),HTTP 不管第几版都是应用层( 7 层)的。

    只是现在浏览器的 http2 实现要求用 TLS 而已,但是这里的概念不能搞混,不然真·笑掉大牙。
    msg7086
        11
    msg7086  
       2018-02-11 10:47:44 +08:00
    @mengzhuo
    一楼 「已知的浏览器只有 https 支持 http2 」
    二楼 「目前的浏览器实现,HTTP2.0 都是密文的」

    说的和你最后一段不是一样?
    anheiyouxia
        12
    anheiyouxia  
       2018-02-11 10:47:58 +08:00 via Android
    @rrfeng
    @yingfengi
    看来你们还没遇到过替换证书的劫持,广东佛山电信会劫持 tls,强硬替换证书插入 js 劫持剪切板(目前测试仅限 Android )
    b821025551b
        13
    b821025551b  
       2018-02-11 10:49:45 +08:00
    @mengzhuo #10 :doge:
    dangyuluo
        14
    dangyuluo  
       2018-02-11 10:50:30 +08:00
    @mengzhuo 人家都说了目前浏览器支持的 http2 是基于 https 的,所以可以防止劫持。哪部分有问题需要看书回炉?
    Famio
        15
    Famio  
       2018-02-11 10:52:10 +08:00
    @anheiyouxia 还有替换证书这操作?不是中间人攻击吗? HSTS 也能劫持?
    rosu
        16
    rosu  
       2018-02-11 10:54:07 +08:00 via Android
    @anheiyouxia 替换证书不是得你先信任他的第三方证书吗?不然这波操作如何进行
    mengdisheng
        17
    mengdisheng  
    OP
       2018-02-11 10:54:24 +08:00
    @anheiyouxia 我擦 真的假的 替换证书是什么操作。。感觉理论上不好实现啊
    gamexg
        18
    gamexg  
       2018-02-11 10:55:56 +08:00
    @mengzhuo #3 看起来我不需要说什么了...


    @anheiyouxia #12 浏览器直接报证书错误?这么搞太明显了吧?或者电信搞定了根证书机构?
    mengzhuo
        19
    mengzhuo  
       2018-02-11 10:56:34 +08:00
    @msg7086 #11

    1、2 楼逻辑不通看着着急

    1. 应该是“目前已知的支持 http2 的浏览器只能用 https ”
    2. http2 只是应用协议,没有加密的说法( HPACK 也算的话算我输……),所以不能说 HTTP2.0 都是密文
    mengzhuo
        20
    mengzhuo  
       2018-02-11 11:02:04 +08:00
    @anheiyouxia #12 这是国产手机的 CA 库被黑了吧,如果是哪个 CA 敢这么发证书,早八年上黑名单了
    msg7086
        21
    msg7086  
       2018-02-11 11:05:06 +08:00   ❤️ 4
    @mengzhuo 回答来自提问。提问就是这么问的,回答只能这么答,如果你看不懂,那是中文交流的问题,如果你看着逻辑不对,那是因为原题提问的逻辑就有问题。不要随便上升到让别人看基础书或者笑掉大牙的程度,嘲讽能解决什么问题?

    「你的中文水平让我笑掉大牙了」,你听了这句话感觉如何?
    有这点嘲笑别人的时间,不如多回答几个问题来得实在。
    wakaka
        22
    wakaka  
       2018-02-11 11:07:37 +08:00
    显然,DNS 劫持没有办法
    wakaka
        23
    wakaka  
       2018-02-11 11:08:02 +08:00
    HttpDNS 可以解决 DNS 劫持。
    honeycomb
        24
    honeycomb  
       2018-02-11 11:10:31 +08:00 via Android
    @anheiyouxia 强行替换证书的话立刻暴露,劫持就失败了
    mengzhuo
        25
    mengzhuo  
       2018-02-11 11:17:48 +08:00
    @msg7086 #21 可以啊,毕竟我中文只学到了高中。

    提问者是不懂,没问题。
    但回答者不能也这么随意,或者跟着逻辑混乱。
    概念很重要,跟着 LZ 逻辑乱,说明概念不理解,概念都不理解是不是该看看基础,至少自己抓抓包,实践一次。
    至少不能让同行看笑话是不是。我都没上升到人身攻击的地步。

    #再次强调#,HTTPS 跟 HTTP2.0 不是一个东西!

    再贴一次 OSI

    ```
    +-------------+
    | 物理层 |
    +-------------+
    | ETH FRAME |
    +-------------+
    | IP |
    +-------------+
    | TCP |
    +-------------+
    | TLS |
    +-------------+
    | HTTP2.0 |
    +-------------+
    ```
    mengzhuo
        26
    mengzhuo  
       2018-02-11 11:23:33 +08:00
    @wakaka #23
    不行的,运营商连 HTTPDNS 的服务也劫持的怎么破?
    所以我一直觉得我厂的 HTTPDNS 就是搞笑之作。
    xwhxbg
        27
    xwhxbg  
       2018-02-11 11:23:36 +08:00
    虽然我书读的少,不过 http2 的特性不是复用 TCP 链接,以及服务端可以主动推送内容么?
    https 是有个 tls 证书加密了吧,除非你手动选择信任运营商劫持的证书,否则应该是没法劫持的吧 ish
    totoro625
        28
    totoro625  
       2018-02-11 11:28:43 +08:00 via Android
    说个笑话,15 年运营商就有劫持 https 的技术了
    chinvo
        29
    chinvo  
       2018-02-11 11:29:18 +08:00   ❤️ 1
    @msg7086 没必要和咬文嚼字扣字眼鸡蛋挑骨头的人辩论这种问题。会扣字眼的人并不在意你到底在讲什么,而只在乎你没和他们一样扣字眼。有一句话说的好,认真你就输了。

    知道一个 OSI 好棒棒哦。
    msg7086
        30
    msg7086  
       2018-02-11 11:30:27 +08:00
    @mengzhuo 恕不再回复。
    lslqtz
        31
    lslqtz  
       2018-02-11 11:35:52 +08:00
    @mengzhuo 一楼的意思难道不是 http/2 需要 https,所以开启 http/2 等于开启 https 不就防劫持了么。。
    h2c 还没有浏览器去实现吧。
    mengzhuo
        32
    mengzhuo  
       2018-02-11 11:46:13 +08:00
    @chinvo #29

    我只是在说 1、2 楼的逻辑问题,需要补习一下基础,这怎么了?

    编程不认真才会输。
    我也不会很多东西,学习不就好了么。
    怎么请大家多学习、认真点有问题么?

    知道 OSI 很棒的,很多来面试的都不会,刷了不少人。
    那各位可以说说 HTTP2.0 比 1.1 多了啥?里面有加密两个字算我输。
    mengzhuo
        33
    mengzhuo  
       2018-02-11 11:49:08 +08:00
    @lslqtz

    感觉是浏览器限制了你们的想象力。
    我完全可以实现一个 http2.0 客户端:不强制走 TLS,还可以反过来,只能走明文。
    LokiSharp
        34
    LokiSharp  
       2018-02-11 11:57:02 +08:00
    @chinvo #29 他说的没毛病啊 HTTP/2 标准本身允许非加密的 HTTP 协议 https://tools.ietf.org/html/rfc7540#section-3.2 http 协议也不只是浏览器在用啊。
    chinvo
        35
    chinvo  
       2018-02-11 12:00:50 +08:00
    @LokiSharp #26 #1 #2 的原话是 “已知的浏览器只有 https 支持 http2 ” “目前的浏览器实现,HTTP2.0 都是密文的”

    所以表达的含义和 “ HTTP/2 标准本身允许非加密的 HTTP 协议” 不冲突
    shuax
        36
    shuax  
       2018-02-11 12:07:02 +08:00
    3 楼太装逼了
    yingfengi
        37
    yingfengi  
       2018-02-11 12:12:21 +08:00 via Android
    @anheiyouxia 劫持证书?理论上我就干过这事情。
    先做 ssl 卸载,然后用行为管理设备自签发的证书发给客户端。
    sholmesian
        38
    sholmesian  
       2018-02-11 12:13:09 +08:00 via iPhone
    cdn 回源过程中如果不是加密的话依旧有可能被劫持……
    lslqtz
        39
    lslqtz  
       2018-02-11 12:27:38 +08:00
    @mengzhuo 你实现了有啥用,对方服务器不支持,照样走 http/1.1
    xenme
        40
    xenme  
       2018-02-11 12:37:36 +08:00 via iPhone   ❤️ 1
    @mengzhuo 再次 TLS 并不适用你说的 OSI Model

    tls 既包含了传输层的控制,也包含数据的处理,4、6、7 层都有,建议还是多回去看看基础书,查查资料,不要看过就套进来
    Mitt
        41
    Mitt  
       2018-02-11 12:40:24 +08:00 via iPhone
    @mengzhuo 没看见"已知"俩字么,不要以为别人什么都不懂,人家只是以适合的语句回答了楼主的问题,而不是像你这样一再的纠结理论,到头来除了多进了几个人的 block list 有什么好处,纠正是可以的,但是人要谦虚。
    anheiyouxia
        42
    anheiyouxia  
       2018-02-11 12:44:36 +08:00 via Android
    @Famio
    @yingfengi
    @mengzhuo
    @rosu
    @mengdisheng
    跟你们想的一样,就是自签证书
    因为我 Android 惯用浏览器是 chrome,最早的时候是 chrome 红屏提醒
    后来慢慢开始就没事了
    直到后来用了 firefox 等其他浏览器,才发现仅仅是针对 chrome 不劫持,Firefox 有时候会提醒证书错误,但是大多数时候就在地址栏显示一个感叹号

    下面截图是 firefox 在刚才的复现情况
    网络是广东佛山电信( 10000 报装的真中国电信宽带)
    这个劫持在 chrome 下不复现,在其他大多数浏览器都能复现,包括 FireFox、Yandex
    ![Screenshot_20180211-123935.jpg]( https://i.loli.net/2018/02/11/5a7fc95d67f22.jpg)

    ![Screenshot_20180211-123942.jpg]( https://i.loli.net/2018/02/11/5a7fc95d45e96.jpg)

    ![Screenshot_20180211-124046.jpg]( https://i.loli.net/2018/02/11/5a7fc95d7e4e2.jpg)
    anheiyouxia
        43
    anheiyouxia  
       2018-02-11 12:49:59 +08:00 via Android
    @Famio
    @rosu
    @mengdisheng
    @gamexg
    @mengzhuo
    @honeycomb
    @yingfengi
    刚才没有 @ 到所有人,看我楼上的回复
    sdrzlyz
        44
    sdrzlyz  
       2018-02-11 12:53:19 +08:00 via Android
    啊?难道我语文白学了,1、2 楼说的很清楚吧。防劫持是 https 的功劳,但是普通用户浏览器 h2 都是跑在 https 上的,题主这么问也没错。。。咋看到 3 楼就变味了。。。另外,并不是所有的提问者都愿意寻根究底,他可能只想知道这个事情靠谱不,愿意回答稍提点下就好,感兴趣的话自然会深挖。
    yingfengi
        45
    yingfengi  
       2018-02-11 12:55:03 +08:00 via Android
    @anheiyouxia 回复 42#
    这种情况应该只会在公司内网之类的出现吧,使用设备自签发证书把网页交给客户端,一般是为了做 ssl 审计,行为管理设备的功能,要信任行为管理设备的根证书才可以。
    不过,上了这么多设备,有做 ssl 审计要求的很少
    anheiyouxia
        46
    anheiyouxia  
       2018-02-11 13:05:37 +08:00 via Android
    @yingfengi 这是家里的宽带
    而且,上面我说得应该跟清楚了吧?劫持的人就只是要劫持你的剪切板,只要不是 chrome 就劫持,因为 chrome 会红屏,我给出的截图是 Firefox,仅仅是显示一个不安全,并没有像 chrome 那样的警告页面

    而且运营商劫持 tls 插广告也不是最近才有的,前几年就有了。以前我跟你们一样的态度,太明显了,一下就被发现了,现实情况是,人家才不管明不明显,能正常打开就行了
    just1
        47
    just1  
       2018-02-11 13:10:56 +08:00 via Android
    @anheiyouxia。。。。。。。。截图这个意思是 https 的网页上加载了 http 内容,你自己找豆瓣去。运营商莫名背锅
    anheiyouxia
        48
    anheiyouxia  
       2018-02-11 13:13:53 +08:00 via Android
    @just1 并不是,页面再次刷新后就正常了
    LokiSharp
        49
    LokiSharp  
       2018-02-11 13:14:11 +08:00
    @anheiyouxia #42 这个应该是 SSLStrip 攻击吧,强制退到 http
    just1
        50
    just1  
       2018-02-11 13:19:25 +08:00 via Android
    @LokiSharp 直接使用 https 不可能实现 SSLStrip
    @anheiyouxia 不知道具体情况是怎么样,但绝对不是运营商的锅。你因为访问的是可信的 https 加密网页。
    anheiyouxia
        51
    anheiyouxia  
       2018-02-11 13:23:29 +08:00 via Android
    @just1 最早他们开始搞这个的时候,chrome 直接提示证书不匹配类的提示的
    你觉得不是运营商可能因为你还没遇到过,以前我也怀疑过是路由器的问题,反正等着吧,看看以后会不会越来越广,隔壁的广州是没有这个情况的
    slgz
        52
    slgz  
       2018-02-11 13:27:59 +08:00
    @shuax 三楼是鹅厂的
    lzvezr
        53
    lzvezr  
       2018-02-11 13:46:28 +08:00
    一般浏览器比较重视安全这块,https 劫持少一些
    app 就不一定了,好在 okhttp 比较普及,不过百度搜索"okhttp 证书"相关内容大部分是如何忽略证书错误,emmmm
    LeoNG
        54
    LeoNG  
       2018-02-11 13:50:16 +08:00
    @mengzhuo #10 如果非要这么咬文嚼字,你这句"https 里的 s 是 TLS "才是笑掉大牙。
    rosu
        55
    rosu  
       2018-02-11 14:00:49 +08:00 via Android
    @anheiyouxia 你自个试一下:v2 是 HTTPS 链接的,你开一个帖子,内容贴上一张 HTTP 图床的图片,这样也会显示不安全。这样和证书没什么关系,只是页面中加载了非 HTTP 链接罢了。
    iNaru
        56
    iNaru  
       2018-02-11 14:13:57 +08:00
    @anheiyouxia 那是页面混合内容的提醒,https 下会默认屏蔽 http 内容。
    miyuki
        57
    miyuki  
       2018-02-11 14:15:03 +08:00 via Android
    HTTPS 在解决这两个问题上提供了可以说是完美地解决方案

    1. 如何保证我连接的对象是正确的
    2. 如何保证数据不被第三方篡改

    p.s. CDN 使用 HTTP 回源被劫持是另一个话题
    mengzhuo
        58
    mengzhuo  
       2018-02-11 15:27:59 +08:00
    @lslqtz #39

    我也可以让服务器也支持,而且锁定 http2.0,6 不 6
    所以不在于具体实现,在于理解。

    @xenme #40

    “ tls 既包含了传输层的控制,也包含数据的处理,4、6、7 层都有,建议还是多回去看看基础书,查查资料,不要看过就套进来”

    所谓层,就是不知道对方的具体实现和方法。
    4 层的东西是不会管你 7 层干了什么,反过来亦然。
    什么叫“ 4、6、7 都有”?
    说真的,吐槽我之前,至少用 wireshark 抓个包。


    @Mitt #41

    我很谦虚地说了请看看书
    我还没粗暴地回 RTFM
    真不知道为啥像踩了很多人尾巴一样,知之为知之,不知为不知。多简单啊。
    mengzhuo
        59
    mengzhuo  
       2018-02-11 15:29:31 +08:00
    @LeoNG

    https = http over TLS
    谢谢
    LokiSharp
        60
    LokiSharp  
       2018-02-11 15:49:23 +08:00
    @miyuki #57 并不完美 在没有声明 HSTS 头的情况下是可以 SSLStrip 的,然后就是如果不在浏览器的 HSTS Preload List 里面的话,首次连接时也可以 SSLStrip + 丢掉 HSTS 头来劫持。

    上了 HSTS Preload List 就基本完美了
    CloudnuY
        61
    CloudnuY  
       2018-02-11 16:00:55 +08:00
    我就想知道为什么运营商能这么光明正大肆无忌惮的劫持全国这么大量的宽带用户?谁给他们的胆儿
    nosugar
        62
    nosugar  
       2018-02-11 16:08:08 +08:00
    https://en.wikipedia.org/wiki/HTTP/2#Encryption
    Encryption[edit]
    HTTP/2 is defined for both HTTP URIs (i.e. without encryption) and for HTTPS URIs (over TLS using ALPN extension[26] where TLS 1.2 or newer is required).[27]

    Although the standard itself does not require usage of encryption,[28] most client implementations (Firefox,[29] Chrome, Safari, Opera, IE, Edge) have stated that they will only support HTTP/2 over TLS, which makes encryption de facto mandatory.[30]

    浏览器只支持 TLS (也就是 https )的 HTTP/2,即使劫持了证书,你浏览器会红色警示你。但是恶意软件偷偷给你电脑安装私有证书,那么这就不安全了。
    anheiyouxia
        63
    anheiyouxia  
       2018-02-11 16:11:44 +08:00 via Android
    @rosu
    @iNaru

    @just1
    想了一下你们说的,确实应该是 https 下引用了 http 的内容
    但是这个我还是认为是运营商的锅
    因为再 chrome 下,只要是 tls 下,无论怎么刷都不会出现这种情况,只要不是用 chrome,随便什么热门网站都会出现这样的情况,而这个时候刷新多一次就正常的绿色锁
    这个问题一天就出现一两次,劫持过后,无论怎么上都不会再出现这种情况
    而这个问题用联通 4G 网络是不会这样的
    虽然不知道运营商是怎么做到这样劫持的
    xenme
        64
    xenme  
       2018-02-11 16:42:42 +08:00 via iPhone   ❤️ 1
    @mengzhuo 原来你的知识都只局限于 wireshark,要是无法解析估计你就不认了。你都不知道为啥分层,每层的作用,只会照本宣科
    mengzhuo
        65
    mengzhuo  
       2018-02-11 17:26:00 +08:00
    @xenme #64

    蛤蛤蛤~你跟我说我只局限于 Wireshark ?

    公开的话

    我早在 14 年就自己实现过全套 smtp
    https://github.com/34nm/gsmtpd

    udp 的 ntp 也写过
    https://github.com/mengzhuo/gontpd

    不公开的就不细说了,从头到尾设计过手游用的二进制应用传输协议,线上稳定运行 2 年。

    你的呢?
    yingfengi
        66
    yingfengi  
       2018-02-11 17:27:14 +08:00 via Android
    我读书少你别骗我,这个不安全是 https 页面加了 http 资源。现在不是很多搞全站 https 很多有这个问题吗。
    不应该是劫持证书,你看下什么证书现在,要是劫持证书肯定不信任会提示的。
    感觉不是运营商的锅。
    just1
        67
    just1  
       2018-02-11 17:40:52 +08:00 via Android
    @anheiyouxia 运营商做不到的。因为你访问的是 https 页面,任何要加载的东西都只能是豆瓣服务器告诉你的,由这锅只能豆瓣背。
    从技术层面上讲,https 是没有办法被劫持的,除非运营商在你的电脑里面信任了他的 ca 证书,但很明显,这不可能。
    xenme
        68
    xenme  
       2018-02-11 17:43:56 +08:00 via iPhone   ❤️ 2
    @mengzhuo 实现这个就很牛?

    你写个其他的,其他话就没错了?这逻辑有点感人啊。
    i730
        69
    i730  
       2018-02-11 18:29:06 +08:00
    @mengzhuo #59 我不知道怎么和你说,但是 一楼二楼 https 可以防劫持+*已知*浏览器的 http2 必须 https 并没有什么冲突的地方。
    laoyuan
        70
    laoyuan  
       2018-02-12 09:00:16 +08:00
    https 劫持我感觉是这样的:即便 url、域名都加密,你总要连接 IP 吧,一旦检测出你在某段时长内第一次连接购物网站的 IP,就给你跳到带尾巴的首页,请问 http2 能破?
    holulu
        71
    holulu  
       2018-02-12 10:00:40 +08:00
    https 是解决服务器与客户端之间通信的隐私问题,跟网站是不是安全没有关系。
    http2 是解决性能问题,一个连接能承担多个请求,只是规定要跑在 https 上。
    为何都被说到其他地方去了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2716 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.