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;
…
}
最后总结
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,不支持最新版本的客户端将退回到兼容版本。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容