传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议
定义 | |
---|---|
协议 | 年份 |
SSL 1.0 | 未知 |
SSL 2.0 | 1995 |
SSL 3.0 | 1996 |
TLS 1.0 | 1999 |
TLS 1.1 | 2006 |
TLS 1.2 | 2008 |
TLS 1.3 | 2018 |
TLS1.3
TLS1.3彻底废弃了RSA秘钥交换算法,之前的1.2的版本先计算MAC再加密的方法存在很多安全隐患,不再允许对加密报文进行压缩处理,TLS1.3弃用的加密算法如下:
- SHA-1 Hash Function 存在安全隐患
- RC4 Steam Cipher ----在HTTPS中使用并不安全
- DES
- 3DES
- AES-CBC
- MD5 Algorithm
- Various Diffie-Hellman groups
- EXPORT-strength ciphers
- RSA Key Transport --------不支持向前安全
LTS1.3 仅采用AEAD类对称加密算法作为唯一的加密选项,同时引入了新的秘钥协商机制 PSK(PreSharedKEy)
对TLS1.3 握手协议的过程分析
从效率性能上讲,TLS1.2的版本 握手需要协商多个参数,握手过程需要往返两个(RTT),相比较1.3的版本在参数,秘钥,秘钥套件和往返次数上都减少。所以TLS1.3放弃了向后兼容的方法,转而向更加安全的措施。
1、客户端发送 ClientHello 消息
- ClientHello---包含的信息---------{ 协议版本 、DH秘钥交换参数列表KeyShare 、随机数 }
2、服务端回复 ServerHello消息
- ServerHello-----包含信息-------{ 选定的加密套件、 发送的证书给客户端、 使用证书私钥对握手消息签名、选用客户端提供的参数生成ECDH临时秘钥、结合选定的DH参数计算出用于加密的共享秘钥、服务端生成临时公钥通过 KeyShare 消息发送给客户端 }
3、客户端收到KeyShare 消息之后,使用证书的公钥进行签名验证,获取服务器端的ECDH临时公钥,生成会话所需要的公钥秘钥
4、双方使用生成的共享秘钥对消息加密传输,保证消息安全。
恢复会话过程
TLS1.3恢复会话可以直接发送加密后的应用数据,不需要额外的TLS握手,因此 “0-RTT” 握手就是指恢复加密传输层不需要二外的RTT,但是在第一次进行完全握手的时候,是需要 1-RTT的。但是存在的一个缺点是,TLS1.3 0-RTT现在无法保证向前安全(ForwardSecrecy),如果当攻击者通过某种手段可以获取到 Secession Ticket key ,攻击者就可以解密之前的加密数据。(注意:环节该问题的办法: 可以通过设置 SeverConfiguration 和Expiration Date字段,使得与Session Ticket Key 相关的DH静态参数在短时间内过期)
证书类型
ECC证书:
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-CHACHA20-POLY1305-SHA256
ECDHE-ECDSA-AES128-CBC-SHA256 (安全等级要求很高的场景,不建议)
ECDHE-ECDSA-AES256-CBC-SHA384 (安全等级要求很高的场景,不建议)
RSA证书:
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-CHACHA20-POLY1305-SHA256
ECDHE-RSA-AES128-CBC-SHA256 (安全等级要求很高的场景,不建议)
ECDHE-RSA-AES256-CBC-SHA384 (安全等级要求很高的场景,不建议)
TLS1.3
更换了新的密码套件,旧的密码套件不在支持TLS1.3,不提供向下兼容的特性。新的密码套件一共五个如下:
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_256_GCM_SHA384
TLS_AES_128_GCM_SHA256 (安全等级要求很高的场景,不建议)
TLS_AES_128_CCM_SHA256 (安全等级要求很高的场景,不建议)、
TLS_AES_128_CCM_8_SHA256