我们真的有必要全站 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 是一种我们不希望看到的、不得已的做法,因此在此讨论一种更理想的可能性。

14934 次点击
所在节点    SSL
84 条回复
lslqtz
2016-10-19 02:14:01 +08:00
@skydiver 理解错了
davidyin
2016-10-19 07:11:04 +08:00
有必要用全站 HTTPS ,甚至可能的话,要上 HSTS 。
Eleutherios
2016-10-19 08:19:13 +08:00
HTTP 缓存的话……当年我用小米的时候想更新一个招行 Android App ,但由于小米的渣缓存策略,下载的死活都是旧版的……之后再未用过小米和招行
owt5008137
2016-10-19 08:45:47 +08:00
你知道 https 可以防劫持么?另外 http/2 可以合并 socket 来减少连接数么
winglight2016
2016-10-19 09:51:28 +08:00
@czb 现在我们用的 tomcat 服务器,使用 https 后比 http 版本并发数少了很多,本来是 700 左右,结果降到了 200 多,这个并发的性能问题也是要考虑的
hqfzone
2016-10-19 09:56:17 +08:00
对大部分站长来说,防运营商劫持是最主要的吧
abramstyle
2016-10-19 10:01:42 +08:00
因为 http2 , 有必要
czb
2016-10-19 10:28:55 +08:00
@winglight2016 我们从 10 开始走的全站 SSL 所以真的就没有对比数据了…
czb
2016-10-19 10:29:37 +08:00
10 年
wwek
2016-10-19 10:51:00 +08:00
http2.0 搭配 https 其实速度更快了
cnZary
2016-10-19 11:03:11 +08:00
还需要 hsts
bombless
2016-10-19 11:55:34 +08:00
防篡改可以另外加一种机制倒是真的
hoosin
2016-10-19 12:24:17 +08:00
不要因为为了使用 https 而去用 https
bumz
2016-10-19 12:38:00 +08:00
虽然防窃听不是在所有场合都必要的,但是为了某些特殊的应用场合单独发明一种防篡改不防窃听的机制是没有必要的,人们没有这个需求,相应的方案由于增加了复杂度也难以得到推广。

另外,如果把篡改(任意做不实的更改)的含义推广到服务而不是文件的层面上,不防窃听而防篡改是不可能的。不防窃听只防文件被篡改,攻击者可以选择性地中断服务,换句话说,虽然文件没有被篡改,但是服务被篡改了。

比如一个托管图片的网站,提供的服务是托管图片。如果防篡改而不防窃听,那么攻击者可以选择性地屏蔽被托管的图片,并且让用户以为是托管网站服务质量差,这显然不是图片托管网站希望看到的结果。宁可终止服务,不能背负服务质量差的不实恶名。
Balthild
2016-10-19 14:25:00 +08:00
@jybox 中间人攻击……证书都是你自己给中间节点的,首先它连攻击都不能算。
1f9u4c9k1y0o0u1
2016-10-19 14:30:51 +08:00
现在运营商 插广告真是丧心病狂
dangge
2016-10-19 15:56:49 +08:00
给我校的镜像站上了 https 的原因是: 锐捷会主动缓存热门文件, 然后更新就很尴尬了.
然而锐捷还算有点节操, 不会缓存你的 http 请求(笑
Technetiumer
2016-10-19 17:01:43 +08:00
中间路由和代理才是中间人攻击,我完全不信任中间路由,
请问运营商会不会插广告?中间路由会不会盗取数据?
而 CDN 是站长配置的,不信任干嘛要用,难道你不信任你的云服务器么?

另外你的方案只能检测是否被篡改,而不能防止篡改,
篡改了只能拒绝加载,中间路由强插广告怎么办?拒绝加载么???
而 HTTPS ,中间路由根本看不到内容,也无法篡改。

还有,中间路由的缓存站长不可控制,经常不遵守 HTTP 头的缓存设置。
如果运营商不作恶,不插广告,遵守协议,提供一个站长平台给站长设置,就像 CDN 和搜索引擎,并且我的网站没有需要防止窃听的敏感信息,这样的免费 CDN 我还是愿意用的,前提是不被篡改,不插广告,遵守协议,可控。

搜索引擎同样不可控,但是提供站长平台,完全遵守 robots.txt ,不作恶,就可控了。
然而在天朝,运营商不作恶是做梦。
fangjinmin
2016-10-19 17:01:53 +08:00
非常有必要。

首先安全性,就不用说了。 2048 位以上没有国家级的攻击几乎不可能能成功了。

再说 SEO , SEM, google 已经将网站的排名算法改了,启用了 SSL 证书的网站的排名将靠前。
而且各大浏览器,都准备将非 https 的网站标注为不安全。
jasontse
2016-10-19 17:10:07 +08:00
你以为这个 checksum 值传输的过程很靠谱不会被篡改吗

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

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

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

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

© 2021 V2EX