云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

CDN_私服网站空间_新注册优惠

小七 141 0

TLS会话恢复:全速安全

在CloudFlare,使网站在规模上更快、更安全始终是创新的驱动力。我们引入了"通用SSL"来显著增加加密web的大小。为了实现这一点,我们知道我们需要高效地处理大量的HTTPS流量,并为最终用户提供尽可能快的性能。ecos系统的CC BY 2.0图像在本文中,我将解释如何通过跨多个主机的会话恢复来提高通用SSL的速度,并解释我们在这个过程中所做的设计决策。目前,我们使用两种标准化的会话恢复机制,它们需要两种不同的数据共享设计:会话idsrfc5246和会话票证rfc5077。会话ID恢复通过会话ID恢复加密会话意味着服务器使用唯一的会话ID跟踪最近协商的会话。这样做的目的是,当客户机使用会话ID重新连接到服务器时,服务器可以快速查找会话密钥并恢复加密通信。在CloudFlare的每个pop(存在点)上都有多个主机处理HTTPS流量。当客户机尝试恢复与网站的TLS连接时,无法保证它们将连接到以前连接到的同一台物理计算机。如果没有会话共享,会话ID恢复的成功率可以低到1/n(当有n个主机时)。这意味着我们拥有的主机越多,会话恢复的可能性就越小。这直接违背了我们扩展SSL性能的目标!CloudFlare对此问题的解决方案是在PoP中共享会话,使成功的恢复率接近100%。如何共享会话我们使用memcached集群来缓存来自同一PoP中所有主机的所有最近协商的会话。为了增强会话密钥的保密性和安全性,所有缓存的会话都被加密。当协商一个具有会话标识的新会话时,主机会对新会话进行加密并插入memcached中,并按会话ID建立索引;当主机需要查找会话恢复时,会使用会话ID作为密钥查询memcached,并对缓存的会话进行解密以恢复会话。所有这些操作都是以非阻塞异步调用的方式进行的,这要归功于OpenResty的强大功能以及许多便利的OpenResty模块,比如完全异步的memcached客户端。我们还需要在OpenSSL中进行调整以支持异步会话缓存。我想向我的同事Piotr Sikora和Yichun Zhang发出几声欢呼,感谢他们使这个项目成为可能。绩效改进使用OpenSSL的_客户机实用程序,我们可以快速测试会话ID如何从客户端加速TLS连接。我们测试了网站从我们办公室。结果如下:会话恢复的总成本不到完整TLS握手的50%,这主要是因为会话恢复只需要一次往返,而完整的TLS握手需要两次。此外,会话恢复不需要任何大型有限域算法(新会话需要),因此与完整的TLS握手相比,客户端的CPU开销几乎可以忽略不计。对于移动用户来说,会话恢复带来的性能提升意味着更具反应性和电池续航能力的冲浪体验。会议票恢复使用会话id恢复会话有一个主要限制:服务器负责在给定时间段内记住协商的TLS会话。对于每秒有大量并发连接负载的服务器和需要长时间缓存会话的服务器来说,这会带来可伸缩性问题。会话票证恢复旨在解决此问题。想法很简单:将会话存储外包给客户端。会话票证是由一个只有服务器知道的密钥加密的会话密钥和相关信息的blob。票证由服务器在TLS握手结束时发送。支持会话票证的客户端将缓存票证以及当前会话密钥信息。稍后,客户端将会话票证包含在握手消息中,以指示它希望恢复先前的会话,另一端的服务器将能够解密此票证,恢复会话密钥并恢复会话。现在考虑到同一个PoP中的每个主机都使用相同的加密密钥,好消息是每个主机现在都能够解密这个会话票证并恢复客户端的会话。不太好的消息是,这个密钥成为TLS安全的关键单点故障:如果一个对手得到它,每个会话票证的会话密钥信息都会暴露出来!即使在一张会议票的生命周期之后,这样的损失也会使所谓的"完美的向前保密"失效(正如我们在博客上所宣扬的那样)。因此,重要的是:随机生成会话票证密钥,将其分发到服务器,而不必接触永久存储,并频繁地轮换它们(亚当·兰利)如何加密、共享和旋转会话加密密钥为了实现所有这些安全目标,我们首先启动内存中的密钥生成器守护进程,该守护进程每小时生成一个新的、带有时间戳的密钥。密钥是加密的,因此只有我们的nginx服务器才能解密它们。然后,利用CloudFlare现有的安全数据传播基础设施,票证密钥从一个主实例复制到我们在世界各地的所有POP。每个主机通过memcached接口定期查询数据库的本地副本,以获取当前小时的新加密密钥。总而言之,密钥生成守护进程随机生成密钥并每小时旋转一次,密钥将安全地分发到全球所有主机,而无需写入磁盘。还有一些技术细节仍然值得一提。首先,我们需要解决分布式时钟同步问题。例如,可能有一个主机认为它是UTC 12:01 PM,而其他主机仍然认为是UTC 11:59 AM,时钟越快的主机可能开始用12:00的密钥加密会话票证,而其他主机由于还不知道新密钥而无法解密这些票证。或者快速时钟主机可能会发现由于传播延迟,密钥还不可用。我们没有致力于同步,而是通过打破同步要求来解决问题。密钥守护进程提前一小时生成密钥,每个主机都会机会性地将下一个小时的密钥(如果有的话)保存为只解密的密钥。现在,即使使用一个或多个更快的时钟主机,通过票证恢复会话仍然可以不中断地工作,因为它们仍然可以解密由其他任何主机加密的会话票证。我们还将会话票证生存期提示设置为18小时,与SSL会话超时的值相同。每个服务器还保留过去18小时的票证密钥,用于票证解密。结论总而言之,我们使用会话id和会话票证在全局范围内支持TLS会话恢复。对于CloudFlare网络上的任何网站,HTTPS的性能对于每个用户和每台设备都提高了。