利用TLS 1.3网站加载更安全及更快速

2018年3月21日,传输层安全(TLS)协议的1.3版本正式获得批准。TLS是互联网安全的支柱,保护从网络流量到加密电子邮件的一切。1.3版通过简化连接过程和删除旧的、不安全的加密方法,对以前的版本进行改进。

TLS 1.3提供了哪些功能?

与以前的版本(TLS 1.2)相比,主要的改进是初始连接速度更快。当使用TLS连接到一个服务器时,你首先必须交换用于加密未来信息的加密密钥,并协商使用哪种加密协议。这个过程被称为握手。在TLS 1.2中,握手需要向服务器发送两个往返信息:一个用于启动连接,另一个用于建立加密会话。在TLS 1.3中,客户端包括服务器在其第一个消息中创建加密会话所需的数据。这使得服务器可以在一个步骤中创建加密会话。这也有助于防止像POODLE这样的攻击,即恶意的攻击者可以迫使你的浏览器协商到一个不太安全的协议,如SSL 3.0。

TLS 1.2 握手

由Fleshgrinder和The People from The Tango! 桌面项目。[公共领域],来自维基共享资源

由Fleshgrinder和The People from The Tango! 桌面项目。[公共领域],来自维基共享资源

TLS 1.3 握手

TLS 1.3还增加了零往返时间恢复功能,即0-RTT。通过0-RTT,服务器记住了最近连接的客户。下次这些客户连接到服务器时,他们可以立即开始发送数据,而不需要进行握手。在一些测试中,0-RTT将连接速度提高了34%。

为什么TLS 1.3没有得到更广泛的应用?

TLS 1.3与1.2相比是一个重大变化。正因为如此,它破坏了与某些旨在拦截或监控TLS加密信息的中间盒的兼容性。许多这些中间箱在创建时都假设TLS协议会随着时间的推移而改变,当后来的版本打破这些假设时,会导致连接失败。

当Chrome和Firefox团队在2017年初在各自的浏览器中测试TLS 1.3时,他们发现分别只有92.3%和96.1%的时间能够连接到网站。为了解决这个问题,OpenSSL等库增加了一个兼容模式,将TLS 1.3流量修改为看起来像TLS 1.2流量。尽管这将成功率提高到98.8%和98.37%,但这两个浏览器仍然默认禁用TLS 1.3,直到这些兼容层变得更加普遍。

与TLS 1.2相比的性能表现

为了了解TLS 1.3与TLS 1.2的匹配情况,我们在一个支持TLS 1.3的Nginx服务器上进行了一些性能测试。测试是在https://enabled.tls13.com,这是一个由TLS工作组提供的测试网站,使用Sitespeed.io进行的。我们在Chrome 63.0.3293.132的不同实例上测试了这两个版本:一个启用了TLS 1.3(使用ECDHE_ECDSA与X25519进行密钥交换),另一个禁用了TLS 1.3(使用X25519进行密钥交换)。在每个浏览器实例中,我们对该网站进行了三次调用,并重复了这一步骤三次。

整体指标

总的响应大小 1.4 KB
HTML大小 702 B
总响应数 2

对于以下每个指标,我们显示Sitespeed.io计算的平均值(以毫秒计)。

  • FirstPaint:直到浏览器首次开始渲染页面的时间。
  • BackEndTime:服务器生成并开始发送HTML所需的时间。
  • ServerResponseTime:服务器发送响应所需的时间。
  • PageLoadTime: 页面加载所需的时间,从最初请求到在浏览器中加载完成。

TLS 1.2

选项 Test 1 Test 2 Test 3 平均值
FirstPaint 486 424 431 447
BackEndTime 429 377 389 398
ServerResponseTime 104 95 101 100
PageLoadTime 456 401 414 426

TLS 1.3

选项 Test 1 (Mean) Test 2 Test 3 平均值
FirstPaint 441 433 410 428
BackEndTime 391 385 359 378
ServerResponseTime 109 94 96 100
PageLoadTime 420 414 387 407

TLS 1.3显示页面加载时间平均减少了19ms,或4-5%。这些好处主要集中在加密和交付时间上,因为两次测试中的服务器响应时间是一致的。测试网站也不支持0-RTT,这可能会进一步提高性能。

如何启用TLS 1.3

在加密库默认包含TLS 1.3之前,你需要在你的网络服务器中手动启用TLS 1.3。觉得麻烦不懂,可以参考搬主题之前的文章【在BT宝塔面版内设置Nginx开启TLSv1.3为WordPress网站加速图文教程

Apache

Apache通过OpenSSL 1.1.1和NSS 3.29库支持TLS 1.3。

当使用OpenSSL时,在服务器配置的SSLProtocols行中添加TLSv1.3。如果你想明确地指定使用哪些密码套件,请将这些密码套件添加到SSLCipherSuite行中。另外,你也可以使用HIGH别名来包括所有的TLS1.3密码器。

httpd.conf

<VirtualHost *:443>

SSLProtocol TLSv1.3
SSLCipherSuite HIGH

</VirtualHost>

当使用NSS时,将TLSv1.3添加到服务器配置的NSSProtocol行中。

nss.conf


NSSProtocol TLSv1.3

Nginx

Nginx(从1.13版开始)通过OpenSSL 1.1.1库支持TLS1.3。要启用它,在服务器配置的ssl_protocols行中添加TLSv1.3。

Nginx.conf

server {

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

}

Nginx支持Apache使用的相同的SSL密码。

最后总结

TLS 1.3比TLS 1.2提供了重要的安全和速度改进,但它的采用可能会很慢。不仅浏览器和加密库需要支持它,而且围绕旧版本中的怪癖设计的中间箱也需要支持它。该协议已经包含了在22号草案中增加的 “中间箱友好 “的内容,但在保证向后兼容之前,企业不太可能急于部署它。

目前,你可以通过使用CloudFlare的中间盒干扰测试来检查你的网络是否为TLS 1.3做好准备。你也可以通过使用Qualys的SSL客户端测试来检查你的浏览器是否与TLS 1.3兼容。如果协议功能框中显示TLS 1.3为绿色,你就可以了。你也可以在服务器上启用TLS 1.2和TLS 1.3,不支持最新版本的客户端将退回到兼容版本。

千百度
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容