TLS v1.3在TLS v1.2的基础上,吸收了之前的设计,并且做了大量的改进。相对于TLS v1.2,协议更简洁、更安全、性能也更好。以下是对比TLS v.1.2说明TLSv1.3的变化。
SSL握手完成双方鉴权Auth、协商对称密钥的过程。对比TLS1.2(图2)和TLS1.3(图3)的握手区别。TLS1.3重新设计了12种握手报文。相比TLS1.2,新增了Hello Retry Request、Early Data、End of Early Data、New Session Ticket、Key Update,废弃了Server Hello Done、Client Key Exchange、Server Key Exchange(图1)。
TLS1.2
Client | Server | |||
---|---|---|---|---|
Client Params | ClientHello +Cipher Suite +List of supported groups/curves | ----> | ||
<---- | ServerHello +Chosen Cipher Suite | Server Params | ||
<---- | Certificate * | Auth | ||
<---- | ServerKeyExchange * | Key Exch | ||
<---- | CertificateRequest* | Auth | ||
<---- | ServerHelloDone | |||
Auth | Certificate* | ----> | ||
Key Exch | ClientKeyExchange | ----> | ||
Auth | CertificateVerify* | ----> | ||
[ChangeCipherSpec] Finished | ----> | |||
<---- | [ChangeCipherSpec] | |||
<---- | Finished | |||
Application Data | <---> | Application Data |
图2、TLS1.2的握手过程
TLS1.3
Client | Server | |||
---|---|---|---|---|
Client Params | ClientHello +Cipher Suite +List of supported groups/curves | ----> | ||
Key Exch | + key_share* + signature_algorithms* + psk_key_exchange_modes* + pre_shared_key* | |||
<---- | ServerHello +Chosen Cipher Suite | Server Params | ||
<---- | + key_share* + pre_shared_key* | Key Exch | ||
<---- | {EncryptedExtensions} {CertificateRequest*} | Server Params | ||
<---- | {Certificate *} {CertificateVerify*} {Finished} | Auth | ||
Auth | {Certificate *} {CertificateVerify*} {Finished} | ----> | ||
Application Data | <---> | Application Data |
图3、TLS1.3的握手过程
变化点有如下:
TLS1.3在时延上比TLS1.2更有优势。这里引用了cloudfare的示意图,在完全握手和会话复用场景下说明TLS1.3的优势。
lTLS 1.3(1-RTT):TLS1.3提前发送Key Share,需要支持该特性的算法,比如 AES-GCM-SHA256 和ECDHE P-256。
lTLS 1.2 ECDHE(2-RTT):TLS1.2需要完成ServerKeyExchange和ClientKeyExchange两个阶段完成整个Key-Share,协商完对称密钥。
lTLS 1.3(0-RTT):用来实现0-RTT数据传输的Early Data(ED)报文: 如果使用了PSK协商密钥,可以利用双方都持有的PSK计算出一个early_key,使用该key在发送CH报文之后客户端就可以发送加了密的应用层数据(即ED)与服务端进行通讯,ED的发送与其他握手报文独立,即服务端不用等待接收到ED之后再向客户端发送SH,但是客户端一旦受到服务端发送的Finished报文,必须立即结束ED的发送,而转而发送一个End Of Early Data报文给服务端。除此之外,客户端也可以在early data正常发送完毕之后,发送End Of Early Data结束ED,而不需要等待收到服务端的Finished报文。Early-Data使用PSK派生密钥进行加密,没有forward Sec, 所以0-RTT的实现有一定的安全缺陷,自身没有抗重放攻击的机制。
lTLS 1.2 ECDHE(2-RTT):TLS1.2使用会话复用机制。使用之前建立产生的Session ID/Ticket来还原加密通道,并在还原完成后发送应用层数据。
TLS1.2的1-RTT
TLS1.3的0-RTT
Early data需要客户端和服务端同时支持。
使用openssl模拟的服务器,服务端设置,开启early—data模式:
openssl s_server -key key_path -cert cert_path-accept 8443 -tls1_3 -early_data
1-RTT
客户端首次访问,导出session数据
s_client -connect 127.0.0.1:8443 -tls1_3 -quiet -showcerts -debug -sess_out /tmp/session.dat
客户端第二次访问,使用首次访问的session,并且设置early data,early data的数据为
./openssl s_client -connect 127.0.0.1:8443 -tls1_3 -quiet -showcerts -debug -sess_out /tmp/session.dat -sess_in /tmp/session.dat -early_data /tmp/http.txt
http.txt的内容如下:
GET / HTTP/1.1
Host: mytest.com:8443
Wireshark观察1-RTT和0-RTT:
Tlsv1.2和TLSv1.3对比:
客户端的early-data请求
服务端看到的early-data
TLS1.3加密握手过程中除了ClientHello和ServerHello之外的所有数据。它使用从DH密钥交换派生的密钥加密消息。
消息认证(message authentication)或数据源认证(data origin authentication)表示数据在传输过程中没有被修改(完整性),并且接收消息的实体能够验证消息的源(端点认证)。有三种组合方式:(1)Encrypt-and-MAC (2)MAC-then-Encrypt (3)Encrypt-then-MAC,根据最新密码学动态,目前学术界已经一致同意先加密后算消息认证码Encrypt-then-MAC是最安全。
有人提出将Encrypt和MAC直接集成在一个算法内部,让有经验的密码专家在算法内部解决安全问题,不让算法使用者选择,这就是这就是AEAD(Authenticated-Encryption With Addtional data)类的算法。TLS1.3彻底禁止AEAD以外的其他算法。
AEAD(Authenticated_Encrypted_with_associated_data)——唯一保留的加密方式。TLS协议的最终目的是协商出会话过程使用的对称密钥和加密算法,双方最终使用该密钥和对称加密算法对报文进行加密。
AEAD将完整性校验和数据加密两种功能集成在同一算法中完成,是TLS 1.3中唯一支持的加密方式。
AEAD算法和使用HKDF的hash算法组成了TLS1.3的可用密码套件
+------------------------------+-------------+
| Description | Value |
+------------------------------+-------------+
| TLS_AES_128_GCM_SHA256 | {0x13,0x01} |
| | |
| TLS_AES_256_GCM_SHA384 | {0x13,0x02} |
| | |
| TLS_CHACHA20_POLY1305_SHA256 | {0x13,0x03} |
| | |
| TLS_AES_128_CCM_SHA256 | {0x13,0x04} |
| | |
| TLS_AES_128_CCM_8_SHA256 | {0x13,0x05} |
+------------------------------+-------------+
协议为新的cipher suite定义了新Value,和TLS1.2版本号是不兼容的 。openss1.1.1只支持前三个。如果是服务端选择默认的cipher,则是按此表格的先后顺序选择。
列出当前所有的cipher
openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g'
检查服务端支持的cipher
openssl s_client -ciphersuites TLS_AES_128_CCM_SHA256 -connect 127.0.0.1:8443 2>&1
目前版本的opensl 1.1.1支持RFC协议的前三种密码套件
针对以往的漏洞和攻击风险。TLS1.3做了以下改进。
测试重协商:
重协商失败。
禁用压缩是为了防范CRIME攻击
总之,TLSv1.3重新设计了SSL/TLS协议,在保证更高安全的前提下,也优化了网络性能。TLS1.3+HTTP2.0/QUIC更是以后的趋势,将会有更大的市场占有率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有