loading

SSL延迟有多大?

发布时间:2020-06-02

据说,Netscaιp℅e公司当年设计SSL协议的时候,有人提过,将互联网所有链接都变成HTTPs开头⿱的加密链接。

灬 ╫ ▌

这个建议没有得到采纳,原因之一是HTTPs链接比不加密的HTTP链接慢很多。(另一个原因好像是,HTTPs|链接默认不能缓存。)▄

自从我知道这个掌故以后,脑袋中就有一个观念:HTTPs链接很慢。但是,它到底有多慢,我并没有一个精确的概念。直到今天我从一篇文の章中,学到҉了测量HTTPs链接耗时的方法ぁ。

首先我解释一下,为什么HTTPs链接比较慢。

HTTPs链接和HTTP链接都建立在TCP协议之ф上。HTTP链Ⅵ接比较单纯,使用三个握手数据包建立连接之后,就可以发送内容数据了。

上图中,客户端首先发送SYN数据包,然后服务器发送SYN+ACK数据包,最后客户端发送ACK数据包й,接下来就可以发送◈内容了。这三个数据包的发送过程,叫做TCP握手。

再Υ来看HTTPs链接,它也采用TCP协议发送数据,所以它也需要上面的这三步握手过程。而且╠╡,在这三步结束以后,它还有一个SSL握手。

总结一下,就是下面这两个式子。

HTTP耗时 = TCP握手

HTTPs耗时 = TCP握手 + SS⺌L握手

所以,HTTPs肯定比HTTP耗时,这就叫SSL延迟。

命令行工具curl有一个w参数$,可以用来测量TCP握手和S░SL握手的具体™耗时,以访问支付宝为例。

$ curl -w "∣TCP handshake: %{time_connect}, SSL handshak▇█e: %{time_aↂppconnect}\n" -so /dev/nul☺☻l≯ https:⇔//www.alipay.com TCP haΞndshake۞۞: 0.022, SSL ▐handshake: 0.064

上面★命令中的۩w参数♀表示指定输出格式,′time_connect变℡量表示TCP握手⿳的耗时,time_appcoЕnnec╤t变量表示SS◎L握手的耗时(更多变量请查看文档和实例),s参数和o参数用来关闭标┛准输出。

从运行结果可以看到,SSL握手的耗时(64毫秒)大概是TCP握手(22毫秒)的三ν倍。也就Ⅶ是说,在建立连接的阶段,HTTPs└链接比H∝TTP链接要长3倍的时间,具体数字取决于CPU的快慢和网络状况。

所以,如Ё果是对安全性要求不高的场合,为了╝提高网页性能,建议不要采用保密强度很高的数字证书。一般场合下,1024位的证书已经足够了,2048位♥和4096位的证书将进一步延长SS&L握手的Ъ耗时。

(完)