zoukankan      html  css  js  c++  java
  • SSL延迟有多大?(转)

    add by zhj: SSL层在TCP层之上,SSL握手是在TCP握手完成之后,除了这点之外,两者应该是相对独立的过程。在服务端,这两个过程有可能不在同一台主机上,

    比如服务端用LVS+Nginx实现负载均衡,LVS是四层负载均衡,只解析到TCP层,并不会解析SSL层,而Nginx实现的是七层负载均衡,可以解析到应用层。因此,

    LVS与客户端只建立TCP连接,而SSL握手是在Nginx上实现的。

    原文:http://www.ruanyifeng.com/blog/2014/09/ssl-latency.html

    作者: 阮一峰

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

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

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

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

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

    tcp handshake

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

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

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

    HTTP耗时 = TCP握手

    HTTPs耗时 = TCP握手 + SSL握手

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

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

    
    
    $ curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}
    " -so /dev/null https://www.alipay.com
    
    TCP handshake: 0.022, SSL handshake: 0.064
    
    

    上面命令中的w参数表示指定输出格式,time_connect变量表示TCP握手的耗时,time_appconnect变量表示SSL握手的耗时(更多变量请查看文档实例),s参数和o参数用来关闭标准输出。

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

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

  • 相关阅读:
    自定义注解!绝对是程序员装逼的利器!!
    mybatis连接数据库错误解决方法
    SQL基础
    【2021-1-5】QT+SQLsever数据库的数据管理系统
    以友盟+U-Push为例,深度解读消息推送的筛选架构解决方案应用与实践
    基于Linux的MySQL基本操作
    SQL server函数转Oracle问题之一,强行使用临时表
    安装 部署 postgresql数据库 搭建主从节点 (业务库)
    SQL练习题一(逐行累计)
    ThinkPHP中,display和assign用法详解
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4152237.html
Copyright © 2011-2022 走看看