专栏首页物流IT圈重用Session提高https性能

重用Session提高https性能

  HTTPS的主要缺点是需要设置连接,每次新的TLS连续都需要握手,以便创建共享的加密密钥,这个握手过程在标准TCP的握手过程之上还需要两个额外的来回过程,用这样一个高延时的连接,在网站第一个字节传输之前需要三个来回就让人感觉这个网站有点慢。

  TLS有几个特征可以用来消除额外的来回,比如重用一个会话session,两个标准会话重用机制是 session IDs (RFC 5246) 和 session tickets (RFC 5077),使用其中一个技术,一个客户端可以重用之前创建的会话,这个会话是之前和服务器进行握手成功的,这样可以减少一次来回过程。

  基于SessionID的会话重用适合现代所有浏览器,FireFox和Chrome还支持 session tickets,服务器端的支持也广泛使用,nginx, Apache, HAProxy, IIS等等都支持session ID 和session ticket。

Session ID重用

  重用一个加密的会话是很容易,前提是客户端和服务器端都保存了会话key,通过每个连接给出的唯一标识,服务器知道一个进来的连接是否已经在之前创建过,如果服务器在会话中也已经有会话key,它就能重用。

  Session ID需要服务器保存会话状态如会话key等,这样下次连接才能复用,这就需要服务器保存很多状态信息,耗费了大量内存。

  Session ID共享复用在Apache中可以通过SSLSessionCache 配置,在nginx可以通过ssl_session_cache设置。

Session ticket重用

  在会话ticket复用中,服务器不用为每个session保存状态,它用一个blob数据保存状态,然后将它发给客户端用来维护后来连接,会话ticket允许服务器将其存储状态委托给客户端,类似HTTP cookie一样。

  一个会话ticket是一个加密的数据blob,其中包含需要重用的TLS连接信息,如会话key等,它一般是使用ticket key加密,因为ticket key服务器端也知道,在初始握手中服务器发送一个会话ticket到客户端,存储到客户端本地,当重用会话时,客户端发送会话ticket到服务器,服务器解密然后重用会话。

Session Ticket的安全考虑

  会话ticket有潜在的安全问题,一些TLS加密组件如ECDHE-RSA-AES128-SHA256提供一个安全属性成为向前安全forward secrecy,如果黑客获得了服务器的证书私钥,他们也不能获得会话来破解。

  使用TLS 会话ticket,偷窃了ticket key1后不会允许黑客来解密先前的会话,这是的ticket key非常有价值,为了保持向前安全forward secrecy, ticket key应该经常轮换。

  会话ticket重用在Apache中可以用SSLTicketKeyDefault 配置,在nginx中使用ssl_session_tickets,它们都没有自动轮换ticket key的自动机制,只能通过重启apache nginx来重新加载或创建新的随机key。

负载平衡

  使用负载平衡器时,这些复用技术会遇到挑战,对于一个服务器复用一个连接,它需要先前会话的key,如果先前会话在其他服务器上,新的服务器必须得到原来会话的key。

  这个问题被CloudFlare 和 Twitter使用系统产生一个集中统一的key来解决,ticket key被一个集中的统一的服务器定期创建,安全地发给所有服务器,实现会话ticket共享需要你的架构有一个定制系统的抉择。

总结

  降低创建一个连接的来回过程使得网站加载速度提高,对于使用HTTPS的网站,会话存储可以用于提高连接创建的速度,而正确的实现方式,才能让页面加载时间更漂亮的缩短,特别是在有负载平衡的场合 。

本文分享自微信公众号 - 物流IT圈(exiter18)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 架构师能力模型

    开发者应该根据自己的性格、爱好来选择自己的职业方向。对于性格外向、愿意多与人交流、沟通能力较好的同学,可以考虑向管理方向发展。对于热爱技术、喜欢钻研、性格偏内向...

    物流IT圈
  • HTTP/2.0 简单总结

    HTTP/1.1 对 HTTP/1.0 做了许多优化,也是当今使用得最多的 HTTP 协议:

    物流IT圈
  • spring-session用redis实现session共享实践

    通常情况下,Tomcat、Jetty等Servlet容器,会默认将Session保存在内存中。如果是单个服务器实例的应用,将Session保存在服务器内存中是一...

    物流IT圈
  • 如何在Ubuntu上搭建方舟:生存进化服务器

    《方舟:生存进化》(英语:Ark: Survival Evolved)是一款由Studio Wildcard制作与发行的生存类沙盒动作冒险游戏,使用虚幻4引擎打...

    小翼111
  • 【Nginx】实现负载均衡的几种方式 原

    当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式...

    拓荒者
  • 建站教程:云服务器使用(完整版)

    开头大家可以领取下优惠券;最高可领取2860,反正免费,万一以后用得上呢,不要白不要新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得...

  • 海量之道系列文章之弱联网优化 (五)

    在客户端接入服务器调度策略的演化过程中,我们最早采用了“就近接入”的策略,在距离客户端更近的地方部署服务器或使用CDN,期望通过减少RTT来提高网络交互响应性能...

    樊华恒
  • 建站教程:云服务器使用(完整版)

    https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=09ff33cfb418db12445...

    主机优惠教程
  • Top reasons why you should learn Node.js

    Top 10 reasons you should learn Node.js. Open source programming and JavaScript ...

    用户4822892
  • 腾讯云服务器建站教程-----详细版

    开头大家可以领取下优惠券;最高可领取2860,反正免费,万一以后用得上呢,不要白不要新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得...

扫码关注云+社区

领取腾讯云代金券