我们真的有必要全站 HTTPS 么?

2016-10-18 22:12:44 +08:00
 jybox

SSL 同时保证了数据不被窃听和不被篡改,但也导致了通过 HTTPS 的请求无法被网络中的代理节点缓存 —— 缓存和代理本来是 HTTP 中协议中很重要的部分,但如果使用 HTTPS ,中间节点连 HTTP 头都读不到。

对于包含用户数据的请求用 HTTPS 我觉得是没有问题的;但其实更多的请求是图片、样式表和脚本,这些请求 只需要防篡改,而不需要防窃听,因此完全没有必要使用 SSL 。

我觉得更好的方式是通过 HTTPS 发送主页面,主页面中包含了所有引用的资源的校验和,然后被引用的资源以 HTTP 传输,可以被网络中的代理节点缓存(例如运营商可以在小区的出口路由处部署一个带缓存功能的代理,可节省很多骨干网的带宽),然后浏览器收到资源后检查校验和,确保资源没有被篡改。

<script src='scripts.js' sha256-checksum='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'></script>

<img src='logo.png' sha256-checksum='cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6' />

其实这就像很多 Linux 发行版的仓库一样,包本身有单独的 GPG 签名来防篡改,因此文件本身可以通过 HTTP 传输,也可以被代理和缓存。但是现在有一些源都支持 HTTPS 了,感觉很是浪费资源呀,也增加了用户可以感受到的延迟。

当然,我也很清楚现在 HTTPS 的大势所趋很大原因是因为运营商不按照规则去做缓存,但我觉得全站 HTTPS 是一种我们不希望看到的、不得已的做法,因此在此讨论一种更理想的可能性。

14937 次点击
所在节点    SSL
84 条回复
lightening
2016-10-20 17:02:33 +08:00
@msg7086

Google 全站 HTTPS 了,也不是一样被屏蔽?

这个和用哪种加密方式没关系。无论是楼主的方案,还是 HTTPS ,都提供一种机制:一旦页面被运营商试图篡改,用户会知道。另外浏览器完全可以实现检测到 digest 不一致就拒绝显示整个页面。

至于用户选择是否容忍运营商的篡改,是另一个问题。 HTTPS 和 digest 都无法解决这个问题。
msg7086
2016-10-20 23:37:41 +08:00
@lightening 你回复的是我哪一楼的内容?我有点跟不上对话了。
lightening
2016-10-20 23:48:17 +08:00
@msg7086 这一楼:

“不要拍脑袋想事情。你看 Google 被全国 Ban 了,用户是去投诉了还是去用百度了? ”
msg7086
2016-10-20 23:59:53 +08:00
@lightening 我是回复的 「如果校验和变成一项普遍使用的技术,那么运营商也不敢去通过插广告的方式干扰校验和的工作 —— 因为这样的结果是网页显示不出来,用户会来投诉。」 这段话。

事实上很少会有人真的去投诉说网页显示不出来,只会认为是网站自己出了问题。

至于全站 HTTPS ,有一个好处就是可以更好地防止信道侧漏攻击。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX