
因为个人博客用了腾讯云 cdn https,里面好像能直接开 http2.0 所以有这个疑问。
1 gamexg 2018-02-11 10:09:41 +08:00 已知的浏览器只有 https 支持 http2,所以是可以防劫持。 |
2 lniwn 2018-02-11 10:13:51 +08:00 via Android 目前的浏览器实现,HTTP2.0 都是密文的,所以可以解决运营商内容劫持的问题。 |
3 mengzhuo 2018-02-11 10:27:33 +08:00 https 就防篡改(也就是劫持) 1、2 楼也请看看基础书籍 |
4 rrfeng 2018-02-11 10:28:00 +08:00 明文 http2 一定程度上可以,因为我相信运营商不会开发这个技术的,为什么呢?因为 http2 明文只是 RFC 支持,实际上浏览器是必须 http2 + tls 的。 tls ( https )可以防劫持。 |
5 mengdisheng OP @rrfeng 意思就是并不需要 http2 tls 就完全可以防劫持了是吧。。。好像 http2 没普及 |
6 msg7086 2018-02-11 10:35:45 +08:00 |
7 rrfeng 2018-02-11 10:40:01 +08:00 @mengdisheng 除非你自己实现,现在并没有支持不带 tls 的 http2 客户端可以用。 |
8 yingfengi 2018-02-11 10:42:12 +08:00 via Android 私钥不泄露就没法劫持 |
9 yingfengi 2018-02-11 10:42:36 +08:00 via Android 不过可以反过来做 ssl 卸载 |
10 mengzhuo 2018-02-11 10:44:20 +08:00 @msg7086 #6 https 里的 s 是 TLS (传输层安全 4 层的),HTTP 不管第几版都是应用层( 7 层)的。 只是现在浏览器的 http2 实现要求用 TLS 而已,但是这里的概念不能搞混,不然真笑掉大牙。 |
11 msg7086 2018-02-11 10:47:44 +08:00 |
12 anheiyouxia 2018-02-11 10:47:58 +08:00 via Android |
13 b821025551b 2018-02-11 10:49:45 +08:00 @mengzhuo #10 :doge: |
14 dangyuluo 2018-02-11 10:50:30 +08:00 @mengzhuo 人家都说了目前浏览器支持的 http2 是基于 https 的,所以可以防止劫持。哪部分有问题需要看书回炉? |
15 Famio 2018-02-11 10:52:10 +08:00 @anheiyouxia 还有替换证书这操作?不是中间人攻击吗? HSTS 也能劫持? |
16 rosu 2018-02-11 10:54:07 +08:00 via Android @anheiyouxia 替换证书不是得你先信任他的第三方证书吗?不然这波操作如何进行 |
17 mengdisheng OP @anheiyouxia 我擦 真的假的 替换证书是什么操作。。感觉理论上不好实现啊 |
18 gamexg 2018-02-11 10:55:56 +08:00 |
19 mengzhuo 2018-02-11 10:56:34 +08:00 @msg7086 #11 1、2 楼逻辑不通看着着急 1. 应该是“目前已知的支持 http2 的浏览器只能用 https ” 2. http2 只是应用协议,没有加密的说法( HPACK 也算的话算我输……),所以不能说 HTTP2.0 都是密文 |
20 mengzhuo 2018-02-11 11:02:04 +08:00 @anheiyouxia #12 这是国产手机的 CA 库被黑了吧,如果是哪个 CA 敢这么发证书,早八年上黑名单了 |
21 msg7086 2018-02-11 11:05:06 +08:00 @mengzhuo 回答来自提问。提问就是这么问的,回答只能这么答,如果你看不懂,那是中文交流的问题,如果你看着逻辑不对,那是因为原题提问的逻辑就有问题。不要随便上升到让别人看基础书或者笑掉大牙的程度,嘲讽能解决什么问题? 「你的中文水平让我笑掉大牙了」,你听了这句话感觉如何? 有这点嘲笑别人的时间,不如多回答几个问题来得实在。 |
22 wakaka 2018-02-11 11:07:37 +08:00 显然,DNS 劫持没有办法 |
23 wakaka 2018-02-11 11:08:02 +08:00 HttpDNS 可以解决 DNS 劫持。 |
24 honeycomb 2018-02-11 11:10:31 +08:00 via Android @anheiyouxia 强行替换证书的话立刻暴露,劫持就失败了 |
25 mengzhuo 2018-02-11 11:17:48 +08:00 @msg7086 #21 可以啊,毕竟我中文只学到了高中。 提问者是不懂,没问题。 但回答者不能也这么随意,或者跟着逻辑混乱。 概念很重要,跟着 LZ 逻辑乱,说明概念不理解,概念都不理解是不是该看看基础,至少自己抓抓包,实践一次。 至少不能让同行看笑话是不是。我都没上升到人身攻击的地步。 #再次强调#,HTTPS 跟 HTTP2.0 不是一个东西! 再贴一次 OSI ``` +-------------+ | 物理层 | +-------------+ | ETH FRAME | +-------------+ | IP | +-------------+ | TCP | +-------------+ | TLS | +-------------+ | HTTP2.0 | +-------------+ ``` |
26 mengzhuo 2018-02-11 11:23:33 +08:00 |
27 xwhxbg 2018-02-11 11:23:36 +08:00 虽然我书读的少,不过 http2 的特性不是复用 TCP 链接,以及服务端可以主动推送内容么? https 是有个 tls 证书加密了吧,除非你手动选择信任运营商劫持的证书,否则应该是没法劫持的吧 ish |
28 totoro625 2018-02-11 11:28:43 +08:00 via Android 说个笑话,15 年运营商就有劫持 https 的技术了 |
29 chinvo 2018-02-11 11:29:18 +08:00 |
31 lslqtz 2018-02-11 11:35:52 +08:00 @mengzhuo 一楼的意思难道不是 http/2 需要 https,所以开启 http/2 等于开启 https 不就防劫持了么。。 h2c 还没有浏览器去实现吧。 |
32 mengzhuo 2018-02-11 11:46:13 +08:00 @chinvo #29 我只是在说 1、2 楼的逻辑问题,需要补习一下基础,这怎么了? 编程不认真才会输。 我也不会很多东西,学习不就好了么。 怎么请大家多学习、认真点有问题么? 知道 OSI 很棒的,很多来面试的都不会,刷了不少人。 那各位可以说说 HTTP2.0 比 1.1 多了啥?里面有加密两个字算我输。 |
33 mengzhuo 2018-02-11 11:49:08 +08:00 |
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 协议也不只是浏览器在用啊。 |
35 chinvo 2018-02-11 12:00:50 +08:00 @LokiSharp #26 #1 #2 的原话是 “已知的浏览器只有 https 支持 http2 ” “目前的浏览器实现,HTTP2.0 都是密文的” 所以表达的含义和 “ HTTP/2 标准本身允许非加密的 HTTP 协议” 不冲突 |
36 momo1999 2018-02-11 12:07:02 +08:00 3 楼太装逼了 |
37 yingfengi 2018-02-11 12:12:21 +08:00 via Android @anheiyouxia 劫持证书?理论上我就干过这事情。 先做 ssl 卸载,然后用行为管理设备自签发的证书发给客户端。 |
38 sholmesian 2018-02-11 12:13:09 +08:00 via iPhone cdn 回源过程中如果不是加密的话依旧有可能被劫持…… |
40 xenme 2018-02-11 12:37:36 +08:00 via iPhone |
41 Mitt 2018-02-11 12:40:24 +08:00 via iPhone @mengzhuo 没看见"已知"俩字么,不要以为别人什么都不懂,人家只是以适合的语句回答了楼主的问题,而不是像你这样一再的纠结理论,到头来除了多进了几个人的 block list 有什么好处,纠正是可以的,但是人要谦虚。 |
42 anheiyouxia div class="badges"> 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    |
43 anheiyouxia 2018-02-11 12:49:59 +08:00 via Android |
44 sdrzlyz 2018-02-11 12:53:19 +08:00 via Android 啊?难道我语文白学了,1、2 楼说的很清楚吧。防劫持是 https 的功劳,但是普通用户浏览器 h2 都是跑在 https 上的,题主这么问也没错。。。咋看到 3 楼就变味了。。。另外,并不是所有的提问者都愿意寻根究底,他可能只想知道这个事情靠谱不,愿意回答稍提点下就好,感兴趣的话自然会深挖。 |
45 yingfengi 2018-02-11 12:55:03 +08:00 via Android @anheiyouxia 回复 42# 这种情况应该只会在公司内网之类的出现吧,使用设备自签发证书把网页交给客户端,一般是为了做 ssl 审计,行为管理设备的功能,要信任行为管理设备的根证书才可以。 不过,上了这么多设备,有做 ssl 审计要求的很少 |
46 anheiyouxia 2018-02-11 13:05:37 +08:00 via Android @yingfengi 这是家里的宽带 而且,上面我说得应该跟清楚了吧?劫持的人就只是要劫持你的剪切板,只要不是 chrome 就劫持,因为 chrome 会红屏,我给出的截图是 Firefox,仅仅是显示一个不安全,并没有像 chrome 那样的警告页面 而且运营商劫持 tls 插广告也不是最近才有的,前几年就有了。以前我跟你们一样的态度,太明显了,一下就被发现了,现实情况是,人家才不管明不明显,能正常打开就行了 |
47 just1 2018-02-11 13:10:56 +08:00 via Android @anheiyouxia。。。。。。。。截图这个意思是 https 的网页上加载了 http 内容,你自己找豆瓣去。运营商莫名背锅 |
48 anheiyouxia 2018-02-11 13:13:53 +08:00 via Android @just1 并不是,页面再次刷新后就正常了 |
49 LokiSharp 2018-02-11 13:14:11 +08:00 @anheiyouxia #42 这个应该是 SSLStrip 攻击吧,强制退到 http |
50 just1 2018-02-11 13:19:25 +08:00 via Android |
51 anheiyouxia 2018-02-11 13:23:29 +08:00 via Android @just1 最早他们开始搞这个的时候,chrome 直接提示证书不匹配类的提示的 你觉得不是运营商可能因为你还没遇到过,以前我也怀疑过是路由器的问题,反正等着吧,看看以后会不会越来越广,隔壁的广州是没有这个情况的 |
53 lzvezr 2018-02-11 13:46:28 +08:00 一般浏览器比较重视安全这块,https 劫持少一些 app 就不一定了,好在 okhttp 比较普及,不过百度搜索"okhttp 证书"相关内容大部分是如何忽略证书错误,emmmm |
55 rosu 2018-02-11 14:00:49 +08:00 via Android @anheiyouxia 你自个试一下:v2 是 HTTPS 链接的,你开一个帖子,内容贴上一张 HTTP 图床的图片,这样也会显示不安全。这样和证书没什么关系,只是页面中加载了非 HTTP 链接罢了。 |
56 iNaru 2018-02-11 14:13:57 +08:00 @anheiyouxia 那是页面混合内容的提醒,https 下会默认屏蔽 http 内容。 |
57 miyuki 2018-02-11 14:15:03 +08:00 via Android HTTPS 在解决这两个问题上提供了可以说是完美地解决方案 1. 如何保证我连接的对象是正确的 2. 如何保证数据不被第三方篡改 p.s. CDN 使用 HTTP 回源被劫持是另一个话题 |
58 mengzhuo 2018-02-11 15:27:59 +08:00 |
60 LokiSharp 2018-02-11 15:49:23 +08:00 @miyuki #57 并不完美 在没有声明 HSTS 头的情况下是可以 SSLStrip 的,然后就是如果不在浏览器的 HSTS Preload List 里面的话,首次连接时也可以 SSLStrip + 丢掉 HSTS 头来劫持。 上了 HSTS Preload List 就基本完美了 |
61 CloudnuY 2018-02-11 16:00:55 +08:00 我就想知道为什么运营商能这么光明正大肆无忌惮的劫持全国这么大量的宽带用户?谁给他们的胆儿 |
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,即使劫持了证书,你浏览器会红色警示你。但是恶意软件偷偷给你电脑安装私有证书,那么这就不安全了。 |
63 anheiyouxia 2018-02-11 16:11:44 +08:00 via Android |
64 xenme 2018-02-11 16:42:42 +08:00 via iPhone @mengzhuo 原来你的知识都只局限于 wireshark,要是无法解析估计你就不认了。你都不知道为啥分层,每层的作用,只会照本宣科 |
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 年。 你的呢? |
66 yingfengi 2018-02-11 17:27:14 +08:00 via Android 我读书少你别骗我,这个不安全是 https 页面加了 http 资源。现在不是很多搞全站 https 很多有这个问题吗。 不应该是劫持证书,你看下什么证书现在,要是劫持证书肯定不信任会提示的。 感觉不是运营商的锅。 |
67 just1 2018-02-11 17:40:52 +08:00 via Android @anheiyouxia 运营商做不到的。因为你访问的是 https 页面,任何要加载的东西都只能是豆瓣服务器告诉你的,由这锅只能豆瓣背。 从技术层面上讲,https 是没有办法被劫持的,除非运营商在你的电脑里面信任了他的 ca 证书,但很明显,这不可能。 |
69 i730 2018-02-11 18:29:06 +08:00 @mengzhuo #59 我不知道怎么和你说,但是 一楼二楼 https 可以防劫持+*已知*浏览器的 http2 必须 https 并没有什么冲突的地方。 |
70 laoyuan 2018-02-12 09:00:16 +08:00 https 劫持我感觉是这样的:即便 url、域名都加密,你总要连接 IP 吧,一旦检测出你在某段时长内第一次连接购物网站的 IP,就给你跳到带尾巴的首页,请问 http2 能破? |
71 holulu 2018-02-12 10:00:40 +08:00 https 是解决服务器与客户端之间通信的隐私问题,跟网站是不是安全没有关系。 http2 是解决性能问题,一个连接能承担多个请求,只是规定要跑在 https 上。 为何都被说到其他地方去了? |