TLS 1.3 协议针对安全强化及效率提升等方面进行了大量修改,相继推出 20 多个草案版本,即将完成最终的标准化。标准完成后,OpenSSL 组织将推出 OpenSSL 1.1.1 版本,对 TLS1.3 协议标准提供支持。

本文主要讲解 TLS 1.3 版本的相关特性以及如何在你的服务器上启用 TLS 1.3 的支持。

在谈 TLS 1.3 之前,我们先来看下 TLS 1.2 的工作模式,如图所示是 TLS 1.2 客户端和服务端交互的过程,如图所示:

我们也可以通过 Wireshark 抓包得到的数据

以 ECDHE 密钥交换算法为例,TLS1.2 协议完整的SSL握手过程如下:

  • 第一步,首先客户端发送 ClientHello 消息,该消息中主要包括客户端支持的协议版本、加密套件列表及握手过程需要用到的 ECC 扩展信息;
  • 第二步,服务端回复 ServerHello,包含选定的加密套件和 ECC 扩展;发送证书给客户端;选用客户端提供的参数生成 ECDH 临时公钥,同时回复 ServerKeyExchange 消息;
  • 第三步,客户端接收 ServerKeyExchange 后,使用证书公钥进行签名验证,获取服务器端的 ECDH 临时公钥,生成会话所需要的共享密钥;生成 ECDH 临时公钥和 ClientKeyExchange 消息发送给服务端;
  • 第四步,服务器处理 ClientKeyExchange 消息,获取客户端 ECDH 临时公钥;服务器生成会话所需要的共享密钥;发送密钥协商完成消息给客户端;
  • 第五步,双方使用生成的共享密钥对消息加密传输,保证消息安全。

可以看到,TLS1.2 协议中需要加密套件协商、密钥信息交换、ChangeCipherSpec 协议通告等过程,需要消耗 2-RTT 的握手时间,这也是造成 HTTPS 协议慢的一个重要原因之一。

我们来看下 TLS 1.3 的的交互过程,如图所示:

其抓包得到的数据流如下:

在 TLS 1.3 中,客户端首先不仅发送 ClientHello 支持的密码列表,而且还猜测服务器将选择哪种密钥协商算法,并发送密钥共享,这可以节省很大一部分的开销,从而提高了速度。

TLS1.3 提供 1-RTT 的握手机制,还是以 ECDHE 密钥交换过程为例,握手过程如下。将客户端发送 ECDH 临时公钥的过程提前到 ClientHello,同时删除了 ChangeCipherSpec 协议简化握手过程,使第一次握手时只需要 1-RTT,来看具体的流程:

  • 客户端发送 ClientHello 消息,该消息主要包括客户端支持的协议版本、DH 密钥交换参数列表 KeyShare;
  • 服务端回复 ServerHello,包含选定的加密套件;发送证书给客户端;使用证书对应的私钥对握手消息签名,将结果发送给客户端;选用客户端提供的参数生成 ECDH 临时公钥,结合选定的 DH 参数计算出用于加密 HTTP 消息的共享密钥;服务端生成的临时公钥通过 KeyShare 消息发送给客户端;
  • 客户端接收到 KeyShare 消息后,使用证书公钥进行签名验证,获取服务器端的 ECDH 临时公钥,生成会话所需要的共享密钥;
  • 双方使用生成的共享密钥对消息加密传输,保证消息安全。

如果客户端之前已经连接,我们有办法在 1.2 中进行 1-RTT 连接,而在 TLS 1.3 中允许我们执行 0-RTT 连接,如图所示:

需要说明的是,如需查看 TLS 1.3 的报文,需要使用 2.5 版本的 wireshark,可以去 https://www.wireshark.org/download/automated/ 下载

TLS 1.3 的新特性

1.废除不支持前向安全性的 RSA 和 DH 密钥交换算法;

2.MAC 只使用 AEAD 算法;

3.禁用 RC4 / SHA1 等不安全的算法;

4.加密握手消息;

5.减少往返时延 RTT,支持 0-RTT;

6.兼容中间设备 TLS 1.2;

7.加密握手消息:

TLS1.2 及之前版本的协议中各种扩展信息在 ServerHello 中以明文方式发送,但是 TLS 1.3 协议要求 ServerHello 消息之后的握手信息都需要加密。

△ tls1.2

△ tls1.3

浏览器支持 TLS 1.3

目前最新的 Chrome 和 Firefox 都支持 TLS 1.3,但需要手动开启:

Chrome 中需要将 chrome://flags/ 中的 Maximum TLS version enabled 改为 TLS 1.3(Chrome 62 中需要将 TLS 1.3 改为 Enabled (Draft)

Firefox 中,将 about:config 中的 security.tls.version.max 改为 4;

Web 服务器支持 TLS 1.3

首先,需要下载 openssl 开发版,目前 TLS 1.3 还处于 draft 版,所以要克隆其分支进行编译。

git clone -b tls1.3-draft-18 --single-branchhttps://github.com/openssl/openssl.gitopenssl

注意: github 的最新版本 tls1.3-draft-19 编译后并不会有效果

以 nginx 1.13.8 为例(自 1.13.0 开始 nginx 开始支持 TLSv1.3),在编译的时候加上

--with-openssl=../openssl --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers'

例如我的编译参数

./configure --prefix=/usr/local/nginx --user=www --group=www --with-pcre=/opt/nginx/pcre-8.41 --with-http_ssl_module --with-zlib=/opt/nginx/zlib-1.2.11 --with-http_v2_module --add-module=../nginx-ct-1.3.2 --add-module=../ngx_brotli --with-openssl=../openssl --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers' --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module

编译完成停止你的 nginx 进程,在 nginx 目录执行如下命令

cp -rf ./objs/nginx /usr/local/nginx/sbin/

在你的 nginx 配置文件中添加如下配置

ssl_protocols              TLSv1.2 TLSv1.3; #增加 TLSv1.3重启 nginx 服务。
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

CDN 支持 TLS 1.3

目前,又拍云的 CDN 网络已经率先支持 TLS 1.3,你可以在又拍云的控制台中开启。

开启路径:CDN → 功能配置 → HTTPS → TLS1.3

开启后通过浏览器访问可以看到协议版本。

推荐阅读:

一文读懂 HTTP/2 特性

从 HTTP 到 HTTPS 再到 HSTS

科普 TLS 1.3—新特性与开启方式的更多相关文章

  1. 让互联网更快,Server Push 特性及开启方式详解

    过去 Nginx 并不支持 HTTP/2 的 Server Push 特性,幸运的是 Nginx 1.13.9 已支持该特性,详情介绍请移步 Nginx 官方博客. Server Push 这个特性是 ...

  2. Perl的新特性开启

    1.perl自从5.8开始,新特性需要开启才可以使用,默认只是5.8版本,而不管当前你使用的是那个版本. 2.开启新特性,当然最高可用版本是你实际安装的版本,假设你安装的是v5.26版 ; #或者这样 ...

  3. ECMAscript6(ES6)新特性语法总结(一)

    ES6/ES2015,,在ES5的基础上扩展了很多新的功能,在使用的时候要慎重,因为有一部分js代码在部分浏览器是不兼容的,但是所有写在服务器端的代码基本上都支持ES6的写法. 新特性: 一.开启严格 ...

  4. Java 8 新特性——Lambdas 表达式

    本文内容 引入 测试数据 collect(toList()) map filter flatMap max 和 min reduce 整合操作 参考资料 Java 8 对核心类库的改进主要包括集合类的 ...

  5. C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Variadic Templates 、左右值区分>

    一.新特性介绍 2.0新特性包含了C++11和C++14的部分 1.2 启用测试c++11功能 C++ 标准特定版本的支持,/Zc:__cplusplus 编译器选项启用 __cplusplus 预处 ...

  6. Node 12 值得关注的新特性

    前言 时隔一年,Node.js 12 如约而至,正式发布第一个 Current 版本. 该版本带来了诸如: V8 更新带来好多不错的特性. HTTP 解析速度提升. 启动速度大幅提升. 更好的诊断报告 ...

  7. iOS6、7、8、9新特性汇总和适配说明

    iOS6新特性 一.关于内存警告 ios6中废除了viewDidUnload,viewWillUnload这两个系统回调,收到内存警告时在didReceiveMemoryWarning中进行相关的处理 ...

  8. Java 8 新特性概述

    Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性.其中主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作 ...

  9. 迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上)【转载】

    转自: DBAplus社群 http://www.toutiao.com/m5762164771/ 迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上) - 今日头条(TouTiao.com ...

随机推荐

  1. 智能机器人chatbot论文集合

    机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...

  2. PHP 运行 php-fpm 报错

      报错如下: [27-Aug-2017 18:34:23] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php- ...

  3. Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本

    一.引言         学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...

  4. IO (四)

    1 深度遍历文件夹 示例: package java20; import java.io.File; import java.io.FilenameFilter; import java.text.S ...

  5. grep运用

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  6. 安装RRDtool 1.4.5

    安装rrdtoolRrdtool安装需要cairo.libxml2.pango库支持,可通过yum安装安装libart_lgpl-devel这个包yum -y install libart_lgpl- ...

  7. 使用py2exe发布windows平台Python

    一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2ex ...

  8. iOS设备唯一标识的前世今生

    设备唯一标识 估计很多开发都有被要求过获取一下设备的唯一标识,获取设备的唯一标识经常使用在我们做统计或者是在保证一台设备登录亦或者是做IM的时候可能会考虑去使用它,这一次在自己的需求当中就有一个&qu ...

  9. MySQL索引之B+树

    MySQL索引大都存储在B+树中,除此还有R树和hash索引.B+树的基础还是B树. B树由2部分组成,节点和索引.下面将构建一个B树,每个节点存2个数据,每个节点有前,中,后三个索引.插入数字的顺序 ...

  10. 济南清北学堂游记 Day 3.

    为什么你们都说下午题简单?我反而觉得下午题难...因为上午暴力很好写啊... 第一题惊了是一道博弈论,冷静推理一大波推出了正解,就变成了结论题. 可是结论题不都是水题吗? T2是一道关于异或的题,照例 ...